【问题标题】:groupby multiple values in a column对列中的多个值进行分组
【发布时间】:2022-01-20 17:50:27
【问题描述】:

我在这里有一个数据框的子集:

data = {'Name': ['ch1', 'ch2', 'ch3', 'ch4', 'ch5', 'ch6'],
        'Time': [1,2,3,4,5,6],
        'Week' : [1, 2, 3, 2, 3, 2]
            }

dfx = pd.DataFrame(data)

我需要总结每周的所有时间,因此第 1 周时间为 1,第 2 周时间为 2+4+6,第 3 周时间为 3+5。我还需要它来查看“周”列并找到所有不同的周,因此对于此示例,有 3 个,但对于另一个数据框,它可能是 2 或 4。

最终结果是查看数据框中的一列,找到唯一值 (1,2,3,...n),将这些值中的每一个分组到行中,然后总结每个值的时间。

我尝试了几种方法,但没有一种方法能真正达到我想要的效果。我感谢任何帮助或想法。

预期输出:

                                 Sum
Week 1: 1                         1
Week 2: 2  4  6                   12
Week 3: 3  5                      8

输出可以是数据的单个数据帧,也可以是一个数据帧,其中包含所有三行以及所有数字和最后的总和。

【问题讨论】:

  • 您能否包括您自己的尝试和预期的输出?有点不清楚你想要什么

标签: python pandas dataframe pandas-groupby


【解决方案1】:
    import pandas as pd
data = {'Name': ['ch1', 'ch2', 'ch3', 'ch4', 'ch5', 'ch6'],
        'Time': [1,2,3,4,5,6],
        'Week' : [1, 2, 3, 2, 3, 2]
            }

dfx = pd.DataFrame(data)
dfx = dfx.groupby('Week')['Time'].sum()
print(dfx)

输出:

Week
1     1
2    12
3     8

【讨论】:

  • 这太棒了。有没有办法为每个数据点创建 3 行?所以第 1 周有第 1 周的所有值,第 2 周有每个数字,然后再相加。当我删除 .sum() 时,结果变量如下所示: core.groupby.generic.SeriesGroupBy
【解决方案2】:

你可以groupby“周”,选择“时间”列,可以将多个函数(如list构造函数和sum)传递给Groupby.agg做你想做的事:

out = dfx.groupby('Week')['Time'].agg(Times=list, Total=sum)

输出:

          Times  Total
Week                  
1           [1]      1
2     [2, 4, 6]     12
3        [3, 5]      8

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 2020-04-09
    • 2013-05-27
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多