我想添加一列到一個多索引的Pandas GroupBy DataFrame。該列是分組後的公共密鑰的最大值和平均值之間的差值。Python Pandas將列添加到多索引GroupBy DataFrame
下面是輸入數據幀:
Main Reads Test Subgroup
0 1 5 54 1
1 2 2 55 1
2 1 10 56 2
3 2 20 57 3
4 1 7 58 3
下面是代碼:
import numpy as np
import pandas as pd
df = pd.DataFrame({'Main': [1, 2, 1, 2, 1], 'Reads': [5, 2, 10, 20, 7],\
'Test':range(54,59), 'Subgroup':[1,1,2,3,3]})
result = df.groupby(['Main','Subgroup']).agg({'Reads':[np.max,np.mean]})
這裏是可變result
之前執行的diff
計算:
Reads
amax mean
Main Subgroup
1 1 5 5
2 10 10
3 7 7
2 1 2 2
3 20 20
接着,我計算diff
列:
result['Reads']['diff'] = result['Reads']['amax'] - result['Reads']['mean']
但這裏是輸出:
/home/userd/test.py:9: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/
...stable/indexing.html#indexing-view-versus-copy
...result['Reads']['diff'] = result['Reads']['amax'] - result['Reads']['mean']
我想diff
列在同一水平amax
和mean
。
有沒有辦法將一列添加到Pandas中多索引GroupBy()
對象的最內層(底部)列索引?
謝謝!這很有幫助。 –
你能解釋嵌入式'list'裏面的'lambda'嗎?我不確定我是否明白爲什麼它需要在那裏。 –
lambda只是您應用於'Reads'的另一個函數,就像您放在那裏的np.max和np.mean函數一樣。這意味着字典中的所有功能都將應用於「讀取」,從而創建3個獨立的列。 – Allen