首页 > 解决方案 > 根据其他列的分组依据和条件创建新列

问题描述

我正在使用如下数据框设置:

| date | Product | Region | Age |

| 01/12/20 | Sales | NW | 17 |
| 01/12/20 | Sales | NW | 30 |
| 01/11/20 | Sales | SW | 32 |
| 01/12/20 | Import | SW | 5 |
| 01/12/20 | Import | SW | 45 |
| 01/12/20 | Sales | NW | 31 |
| 01/12/20 | Import | NW | 2 |

我想创建一个新的数据框,显示年龄 > 30 的行数,按日期/产品/区域分组。IE:

日期 产品 地区 陈年
20 年 1 月 12 日 销售量 西北 2
20 年 1 月 11 日 销售量 西南 1
20 年 1 月 12 日 进口 西南 1

我尝试了许多不同的方法,最新的使用 lambda 但到目前为止不成功:

df['aged'] = df.groupby([pd.Grouper(freq="M"), 'Product', 'Region'])['Product'].transform(lambda x: count( x ) if df['age'] >= 30 else 0)

有没有人能够帮助并告诉我我哪里出错了?

标签: pythonpandasdataframe

解决方案


我认为你需要:

new_df = (df[df['Age'].ge(30)].groupby(df.columns.difference(['Age']).tolist())['Age']
                              .count()
                              .reset_index(name='aged'))
print(new_df)


  Product Region      date  aged
0  Import     SW  01/12/20     1
1   Sales     NW  01/12/20     2
2   Sales     SW  01/11/20     1

推荐阅读