为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

扬帆大鱼 2022-12-20 16:27:55
我有以下数据框,其中每条记录都填充了 D 或 E。从来没有。以下是数据框 df,其中包含 4 月(当前)和 3 月 2 个月的虚拟记录。(最初数据将有 12 个月,B 列的值重复出现)我正在寻找: 1. groupby 列 A 为四月份总和(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()关于为什么这两种方法都无法使用其他两列的总和来形成新列的任何建议。
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

由于您正在尝试按月份分组,因此理想情况下您应该尝试从 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

对于第 2 部分(不确定我是否正确理解了这部分问题。如果我错了请纠正我):


print(df_grouped1.groupby('A')['G'].mean().reset_index())


   A    G

0  W  1.5

1  Y  4.0


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信