使用多列中的聚合行值在 Python 中形成新列

我有以下数据框,其中每条记录都填充了 D 或 E。从来没有。以下是数据框 df,其中包含 4 月(当前)和 3 月 2 个月的虚拟记录。(最初数据将有 12 个月,B 列的值重复出现)

http://img2.mukewang.com/63a172380001a3a404790289.jpg

我正在寻找: 1. groupby 列 A 为四月份总和(D 列)/总和(E 列)

http://img.mukewang.com/63a172410001990d01920086.jpg

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()

同样适用于过去两个月(三月和四月)

http://img3.mukewang.com/63a1724c0001cf8602740082.jpg

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

关于为什么这两种方法都无法使用其他两列的总和来形成新列的任何建议。


扬帆大鱼
浏览 113回答 1
1回答

郎朗坤

由于您正在尝试按月份分组,因此理想情况下您应该尝试从 C 列中提取月份,这将使事情变得更容易。df['F'] = df.C.apply(lambda x: x.split("-")[1])print(df)   A      C     D    E    F0  W  6-Mar   NaN  1.0  Mar1  W  6-Mar   4.0  NaN  Mar2  W  6-Mar   NaN  1.0  Mar3  W  6-Apr   2.0  NaN  Apr4  W  6-Apr   NaN  2.0  Apr5  Y  6-Mar  10.0  NaN  Mar6  Y  6-Mar   NaN  2.0  Mar7  Y  6-Apr   6.0  NaN  Apr8  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     G0   W   Apr  2.0  2.0   1.01   W   Mar  4.0  2.0   2.02   Y   Apr  6.0  2.0   3.03   Y   Mar 10.0  2.0   5.0对于第 2 部分(不确定我是否正确理解了这部分问题。如果我错了请纠正我):print(df_grouped1.groupby('A')['G'].mean().reset_index())   A    G0  W  1.51  Y  4.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python