Python groupby的就地转换
是否有可能使用Python groupby的就地转换,python,pandas,in-place,Python,Pandas,In Place,是否有可能使用groupby语句在原地对数据帧进行变异 import pandas as pd dt = pd.DataFrame({ "LETTER": ["a", "b", "c", "a", "b"], "VALUE" : [10 , 12 , 13, 0, 15] }) def __add_new_col(dt_): dt_['NEW_COL'] = dt_['V
groupby
语句在原地对数据帧进行变异
import pandas as pd
dt = pd.DataFrame({
"LETTER": ["a", "b", "c", "a", "b"],
"VALUE" : [10 , 12 , 13, 0, 15]
})
def __add_new_col(dt_):
dt_['NEW_COL'] = dt_['VALUE'] - dt_['VALUE'].mean()
return dt_
pass
dt.groupby("LETTER").apply(__add_new_col)
LETTER VALUE NEW_COL
0 a 10 5.0
1 b 12 -1.5
2 c 13 0.0
3 a 0 -5.0
4 b 15 1.5
dt
LETTER VALUE
0 a 10
1 b 12
2 c 13
3 a 0
4 b 15
在R data.table中,可以使用
:=
运算符,例如dt[,col:=…,by='LETTER']
我很确定在分组过程中不能对数据帧进行变异。你可以做完全相同的操作,用它的平均值映射每个字母,然后执行操作
df['NEW_COL'] = df['VALUE'] - df['LETTER'].map(dt.groupby("LETTER")['VALUE'].mean()).values
这将处理任何可能的订购问题,我不相信即使经过测试也能保证。安全总比遗憾好:)
此外,我在映射后使用.values访问器,因为我不确定“映射”序列的索引与“值”序列的索引是否相同,有时会产生NaN。我认为可以使用该方法返回序列
与df
相同的长度和索引,并使用减法:
print (dt.groupby("LETTER")['VALUE'].transform('mean'))
0 5.0
1 13.5
2 13.0
3 5.0
4 13.5
Name: VALUE, dtype: float64
dt['NEW_COL'] = dt['VALUE'] - dt.groupby("LETTER")['VALUE'].transform('mean')
print (dt)
LETTER VALUE NEW_COL
0 a 10 5.0
1 b 12 -1.5
2 c 13 0.0
3 a 0 -5.0
4 b 15 1.5
为什么不
df['NEWCOL']=dt.groupby('LETTER')['VALUE'].apply(lambda x:x-x.mean())
?@JohnGalt是否有订单担保?是的,您也可以自己验证。