我有以下的数据框,其中每条记录都填了D或E。下面是数据框df,其中有4月(当前)& 3月两个月的虚拟记录。(原本数据会有12个月,B列的值会重复出现)
我正在寻找:1. 四月份 D列的总和(E列)
df.groupby(['A', 'C']).df.D/df.E.sum().rolling(1, min_periods=1).mean()
另一种方法是:
def divide_two_cols(df):
return df['D'].sum() / df['E'].sum()
df.groupby(['A', 'C']).divide_two_cols(df).sum().rolling(1, min_periods=1).sum()
df.groupby(['A', 'C']).df.D/df.E.sum().rolling(2, min_periods=1).mean()
有什么建议可以告诉我,为什么这两种方法都不能使用其他两个列的总和来形成一个新的列。
由于你是想按月份进行分组,你最好尝试从C列中提取月份,这样会使你的工作更容易。
df['F'] = df.C.apply(lambda x: x.split("-")[1])
print(df)
A C D E F
0 W 6-Mar NaN 1.0 Mar
1 W 6-Mar 4.0 NaN Mar
2 W 6-Mar NaN 1.0 Mar
3 W 6-Apr 2.0 NaN Apr
4 W 6-Apr NaN 2.0 Apr
5 Y 6-Mar 10.0 NaN Mar
6 Y 6-Mar NaN 2.0 Mar
7 Y 6-Apr 6.0 NaN Apr
8 Y 6-Apr NaN 2.0 Apr
对于第1部分(G列是你要找的列)。
df_grouped1 = df.groupby(['A', 'F'])['D', 'E'].sum().reset_index()
df_grouped1['G'] = df_grouped1['D']/df_grouped1['E']
print(df_grouped1)
A F D E G
0 W Apr 2.0 2.0 1.0
1 W Mar 4.0 2.0 2.0
2 Y Apr 6.0 2.0 3.0
3 Y Mar 10.0 2.0 5.0
对于第二部分(不知道我对这部分问题的理解是否正确。如果我错了,请纠正我)。
print(df_grouped1.groupby('A')['G'].mean().reset_index())
A G
0 W 1.5
1 Y 4.0