【问题标题】:Iterating over groups in a dataframe [duplicate]迭代数据框中的组[重复]
【发布时间】:2018-02-24 03:12:52
【问题描述】:

我遇到的问题是我想对数据框进行分组,然后在分组后使用函数来操作数据。例如,我想按日期对数据进行分组,然后遍历日期组中的每一行以解析为函数?

问题是 groupby 似乎创建了一个键元组,然后是一个由数据中所有行组成的巨大字符串,使得遍历每一行变得不可能

【问题讨论】:

  • 你应该发布你的代码和想要的结果。

标签: python pandas dataframe group-by pandas-groupby


【解决方案1】:

当您在数据框上应用groupby 时,您不会获得行,而是获得数据框组。例如,考虑:

df
    ID        Date  Days  Volume/Day
0  111  2016-01-01    20          50
1  111  2016-02-01    25          40
2  111  2016-03-01    31          35
3  111  2016-04-01    30          30
4  111  2016-05-01    31          25
5  112  2016-01-01    31          55
6  112  2016-01-02    26          45
7  112  2016-01-03    31          40
8  112  2016-01-04    30          35
9  112  2016-01-05    31          30

for i, g in df.groupby('ID'):
     print(g, '\n')


    ID        Date  Days  Volume/Day
0  111  2016-01-01    20          50
1  111  2016-02-01    25          40
2  111  2016-03-01    31          35
3  111  2016-04-01    30          30
4  111  2016-05-01    31          25 

    ID        Date  Days  Volume/Day
5  112  2016-01-01    31          55
6  112  2016-01-02    26          45
7  112  2016-01-03    31          40
8  112  2016-01-04    30          35
9  112  2016-01-05    31          30 

对于您的情况,您可能应该查看dfGroupby.apply,如果您想在您的组上应用一些功能,dfGroupby.transform 以生成类似的索引数据框(请参阅文档以获取解释)或dfGroupby.agg,如果您想生成汇总结果。

你会做这样的事情:

r = df.groupby('Date').apply(your_function) 

你将你的函数定义为:

def your_function(df):
    ... # operation on df
    return result

如果您在实施过程中遇到问题,请打开一个新问题,发布您的数据和代码,以及任何相关的错误/回溯。编码愉快。

【讨论】:

  • 但是如果我应用到组的函数需要原始数据框的列之一,例如在您的示例中,您按 ID 细分日期,但如果该函数依赖该组中的天数作为参数怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 2021-10-01
  • 2022-01-20
相关资源
最近更新 更多