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

通过消除重复来编写 Pandas groupby 代码的有效方法

通过消除重复来编写 Pandas groupby 代码的有效方法

凤凰求蛊 2024-01-27 16:12:19
我有一个如下所示的数据框。df = pd.DataFrame({    'Country':['A','A','A','A','A','A','B','B','B'],    'City':['C 1','C 1','C 1','B 2','B 2','B 2','C 1','C 1','C 1'],    'Date':['7/1/2020','7/2/2020','7/3/2020','7/1/2020','7/2/2020','7/3/2020','7/1/2020','7/2/2020','7/3/2020'],    'Value':[46,90,23,84,89,98,31,84,41]})我需要创建 2 个平均值首先,以Country和City为标准其次,仅对Country为了实现这一点,我们可以轻松编写以下代码df.groupby(['Country','City']).agg('mean')+---------+------+-------+| Country | City | Value |+---------+------+-------+|       A |  B 2 | 90.33 ||         +------+-------+|         |  C 1 |    53 |+---------+------+-------+|       B |  C 1 |    52 |+---------+------+-------+df.groupby(['Country']).agg('mean').    +---------+-------+    | Country |       |    +---------+-------+    |       A | 71.67 |    +---------+-------+    |       B |    52 |    +---------+-------+上述 2 个代码中唯一的变化是groupbycriteria City。除此之外一切都一样。所以有明显的重复/重复的代码。(特别是当涉及到复杂的场景时)。现在我的问题是,有什么方法可以让我们编写一个代码来同时合并这两种场景。DRY——不要重复自己。我的想法如下。Choice = 'City'   `<<--Here I type either City or None or something based on the requirement. Eg: If None, the Below code will ignore that criteria.`df.groupby(['Country',Choice]).agg('mean')这可能吗?或者有效地编写上述代码而不重复的最佳方法是什么?
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

我不确定你想要完成什么但是..为什么不只使用 if 呢?


columns=['Country']

if Choice:

    columns.append(Choice)

df.groupby(columns).agg('mean')


查看完整回答
反对 回复 2024-01-27
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

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