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

我有一个如下所示的数据框。


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 个平均值

  1. 首先,以CountryCity为标准

  2. 其次,仅对Country

为了实现这一点,我们可以轻松编写以下代码

  1. 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')

这可能吗?或者有效地编写上述代码而不重复的最佳方法是什么?


凤凰求蛊
浏览 116回答 1
1回答

冉冉说

我不确定你想要完成什么但是..为什么不只使用 if 呢?columns=['Country']if Choice:&nbsp; &nbsp; columns.append(Choice)df.groupby(columns).agg('mean')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python