熊猫数据框如何基于groupby合并所有行

时间:2020-07-01 12:18:17

标签: python pandas dataframe pandas-groupby

我的数据框有很多列,其中2个是分类的,其余的是数字:

df = [type1 , type2 , type3 , val1, val2, val3
       a       b        q       1    2     3
       a       c        w       3    5     2
       b       c        t       2    9     0
       a       b        p       4    6     7
       a       c        m       2    1     8]

我想基于操作groupby(["type1","type2"])应用合并,该合并将创建以下数据框:

df = [type1 , type2 ,type3, val1, val2, val3 , val1_a, val2_b, val3_b
       a       b       q      1    2     3      4        6      7
       a       c       w      3    5     2      2        1      8
       b       c       t      2    9     0      2        9      0

请注意:每个分组依据可以有1或2行,但不能更多。如果是1,则只需复制单行

1 个答案:

答案 0 :(得分:2)

想法由type1, type2使用GroupBy.cumcount进行计数器,然后创建MultiIndex,由DataFrame.unstack整形,由ffill前行填充每行的缺失值,转换为整数,按计数器级别排序,最后进入列表理解范围MultiIndex

g = df.groupby(["type1","type2"]).cumcount()

df1 = (df.set_index(["type1","type2", g])
        .unstack()
        .ffill(axis=1)
        .astype(int)
        .sort_index(level=1, axis=1))
df1.columns = [f'{a}_{b}' if b != 0 else a for a, b in df1.columns]
df1 = df1.reset_index()
print (df1)
  type1 type2  val1  val2  val3  val1_1  val2_1  val3_1
0     a     b     1     2     3       4       6       7
1     a     c     3     5     2       2       1       8
2     b     c     2     9     0       2       9       0