如何为数据框中的每一行添加比较列(即 lead
)到我的数据框中。它应该取列平均值(总体领先平均值)并减去其月平均值。这可以通过 apply
和使用 groupby
的 lambda 来完成吗?
即如何创建一个额外的比较列,Lead_Diff
,即行项目“每月平均读数”与其整体/列平均值的差异。下面是我的数据的模型,提前致谢。
info = {'date': ['01-18', '02-18', '03-18', '01-18','02-18','01-18','03-18'],
'lead': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6,0.7],
'copper': [0.7, 0.6, 0.5, 0.4, 0.3, .2, 0.1]}
df = pd.DataFrame.from_dict(info)
最佳答案
我相信你需要transform
对于与原始 DataFrame
大小相同的新 Series
中的 mean
并减去列的 mean
:
df['mean'] = df.groupby('date')['lead'].transform('mean') - df['lead'].mean()
print (df)
date lead copper mean
0 01-18 0.1 0.7 -0.033333
1 02-18 0.2 0.6 -0.050000
2 03-18 0.3 0.5 0.100000
3 01-18 0.4 0.4 -0.033333
4 02-18 0.5 0.3 -0.050000
5 01-18 0.6 0.2 -0.033333
6 03-18 0.7 0.1 0.100000
如果年份不重要并且只需要几个月的工作:
#changed data
info = {'date': ['01-18', '03-17', '03-18', '01-18','03-17','01-17','03-17'],
'lead': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6,0.7],
'copper': [0.7, 0.6, 0.5, 0.4, 0.3, .2, 0.1]}
df = pd.DataFrame.from_dict(info)
df['date'] = pd.to_datetime(df['date'], format='%m-%y')
df['mean'] = df.groupby(df['date'].dt.month)['lead'].transform('mean') - df['lead'].mean()
print (df)
date lead copper mean
0 2018-01-01 0.1 0.7 -0.033333
1 2017-03-01 0.2 0.6 0.025000
2 2018-03-01 0.3 0.5 0.025000
3 2018-01-01 0.4 0.4 -0.033333
4 2017-03-01 0.5 0.3 0.025000
5 2017-01-01 0.6 0.2 -0.033333
6 2017-03-01 0.7 0.1 0.025000
关于python - Pandas 添加列比较结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53813755/