2016-12-14 8 views
2

私はそのようなデータを持っています。パンダ:最大値と最小値を取得して各行に書き込む方法は?

IカラムA(列Aの各々同じ値の場合、Iが列Bに最小値と最大値を検索する)に応じてmaxとB列の極小値を取り、書きたいする
>> df 
    A B C 
0 1 5 1 
1 1 7 1 
2 1 6 1 
3 1 7 1 
4 2 5 1 
5 2 8 1 
6 2 6 1 
7 3 7 1 
8 3 9 1 
9 4 6 1 
10 4 7 1 
11 4 1 1 

元のテーブルの結果。私のコードは:

df1 = df.groupby(['A']).B.transform(max) 
df1 = df1.rename(columns={'B':'B_max'}) 
df2 = df.groupby.(['A']).B.transform(min) 
df1 = df1.rename(columns={'B':'B_min'}) 
df3 = df.join(df1['B_max']).join(df2['B_min']) 

これが結果です。

A B C B_max B_min 
0 1 5 1   
1 1 7 1 7 
2 1 6 1 
3 1 4 1   4 
4 2 5 1 
5 2 8 1 8 
6 2 6 1   6 
7 3 7 1   7 
8 3 9 1 9 
9 4 6 1 
10 4 7 1 7 
11 4 1 1   1 

しかし、私はこのような表を見たいです。

A B C B_max B_min 
0 1 5 1 7  4 
1 1 7 1 7  4 
2 1 6 1 7  4 
3 1 4 1 7  4 
4 2 5 1 8  6 
5 2 8 1 8  6 
6 2 6 1 8  6 
7 3 7 1 9  7 
8 3 9 1 9  7 
9 4 6 1 7  1 
10 4 7 1 7  1 
11 4 1 1 7  1 

dfと同じ長さのtransformリターンSeriesので、私はあなただけの新しい列に値を割り当てる必要があると思う。このよう

答えて

2

を見て、結果のコードを解釈:

df = pd.DataFrame({ 
'A': [1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4], 
'B': [5, 7, 6, 7, 5, 8, 6, 7, 9, 6, 7, 1], 
'C': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}) 

print (df) 
    A B C 
0 1 5 1 
1 1 7 1 
2 1 6 1 
3 1 7 1 
4 2 5 1 
5 2 8 1 
6 2 6 1 
7 3 7 1 
8 3 9 1 
9 4 6 1 
10 4 7 1 
11 4 1 1 
df['B_max'] = df.groupby(['A']).B.transform(max) 
df['B_min'] = df.groupby(['A']).B.transform(min) 

print (df) 
    A B C B_max B_min 
0 1 5 1  7  5 
1 1 7 1  7  5 
2 1 6 1  7  5 
3 1 7 1  7  5 
4 2 5 1  8  5 
5 2 8 1  8  5 
6 2 6 1  8  5 
7 3 7 1  9  7 
8 3 9 1  9  7 
9 4 6 1  7  1 
10 4 7 1  7  1 
11 4 1 1  7  1 

g = df.groupby('A').B 
df['B_max'] = g.transform(max) 
df['B_min'] = g.transform(min) 

print (df) 
    A B C B_max B_min 
0 1 5 1  7  5 
1 1 7 1  7  5 
2 1 6 1  7  5 
3 1 7 1  7  5 
4 2 5 1  8  5 
5 2 8 1  8  5 
6 2 6 1  8  5 
7 3 7 1  9  7 
8 3 9 1  9  7 
9 4 6 1  7  1 
10 4 7 1  7  1 
11 4 1 1  7  1 
+0

それは変だ、私はそのようなエラーを与えた。 TypeError: 'SeriesGroupBy'オブジェクトはアイテム割り当てをサポートしていません – anniejcannon

+0

はい、確信しています。 – anniejcannon

+0

申し訳ありませんが、タイプミスがありました。今、私はそのような警告を受けています。 EXTras9.py:93:SettingWithCopyWarning: 値は、DataFrameからスライスのコピーに設定しようとしています。 .locを使用してみてください[row_indexer、col_indexer] = valueの代わりに – anniejcannon

関連する問題