如何对多个列进行分组并汇总不同列上的差异?

时间:2020-09-30 18:30:42

标签: python pandas pandas-groupby

我正在这里寻求有关如何在Python / Panda中执行此操作的帮助:

我希望获取原始数据(如下),并通过一个具有多个cols(州,县和日期)的组来查找多个cols(cnt_a和cnt_b)的每日差异。

我一直在尝试不同的方法,但似乎无法解决“检查重复项”问题

df.cnt_a = df.sort_values(['state','county','date']).groupby['state','county','date','cnt_a'].diff(-1)

尝试将其拆分以一次修复一件事:

df1 = df.sort_values(['state','county','date'])

df2 = df1.groupby(['state','county'])['cnt_a'].diff()

原始数据。 => df

date        county  state       cnt_a    cnt_b
2020-06-13  Bergen  New Jersey   308     11
2020-06-14  Bergen  New Jersey   308     11
2020-06-15  Bergen  New Jersey   320     15
2020-06-12  Union   New Jersey   100     3
2020-06-13  Union   New Jersey   130     4
2020-06-14  Union   New Jersey   150     5
2020-06-12  Bronx   New York     200     100
2020-06-13  Bronx   New York     210     200

想要的输出

date        county  state       cnt_a   cnt_b   daydiff_a    daydiff_b
2020-06-13  Bergen  New Jersey   308     11        0            0 
2020-06-14  Bergen  New Jersey   308     11        0            0
2020-06-15  Bergen  New Jersey   320     15        12           4
2020-06-12  Union   New Jersey   100     3         0            0
2020-06-13  Union   New Jersey   130     4         30           1
2020-06-14  Union   New Jersey   150     5         20           1
2020-06-12  Bronx   New York     200     100       0            0 
2020-06-13  Bronx   New York     210     200       10           100

1 个答案:

答案 0 :(得分:1)

  • df进行排序很重要,因为df.groupby将被排序。如果未首先对df进行排序,则来自.groupby的联接列将与df的顺序不同。
    • 请确定df'state''country''date'的顺序排列,但是{{1 }}。
  • {{1}和'date'上的.groupby,并将.groupby聚合到所需的列。
  • 'state'(具有0)和'country' .diff(基于索引)到groupby对象。
    • 指定fillna,或使用.join更改列标题。
df