在Python中使用多个列中的累加行值来形成新的列。

问题描述 投票:0回答:1

我有以下的数据框,其中每条记录都填了D或E。下面是数据框df,其中有4月(当前)& 3月两个月的虚拟记录。(原本数据会有12个月,B列的值会重复出现)

enter image description here

我正在寻找:1. 四月份 D列的总和(E列)

enter image description here

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()
  1. 适用于过去两个月(3月& 4月)

enter image description here

df.groupby(['A', 'C']).df.D/df.E.sum().rolling(2, min_periods=1).mean()

有什么建议可以告诉我,为什么这两种方法都不能使用其他两个列的总和来形成一个新的列。

python dataframe pandas-groupby
1个回答
0
投票

由于你是想按月份进行分组,你最好尝试从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
© www.soinside.com 2019 - 2024. All rights reserved.