大熊猫根据分组合并行

时间:2020-02-27 20:08:34

标签: python pandas

假设我有一个看起来像这样的数据框:

col1    col2    col3
a       1       a
a       98      xx
a       99      xy
b       1       a
b       2       b
b       3       c
b       8       xx
b       9       xy

我需要合并col3分组的xx = xycol1中的行,因此结果数据帧看起来像:

col1    col2    col3
a       1       a
a       98      xz
b       1       a
b       2       b
b       3       c
b       8       xz

是否有一种简单的方法pandas

2 个答案:

答案 0 :(得分:2)

IIUC

df.groupby([df.col1,df.col3.replace({'xx':'xz','xy':'xz'})]).col2.first().reset_index()
Out[29]: 
  col1 col3  col2
0    a    a     1
1    a   xz    98
2    b    a     1
3    b    b     2
4    b    c     3
5    b   xz     8

答案 1 :(得分:0)

这是我使用drop_duplicates的方法:

# xx and xy
s = df.col3.isin(['xx','xy']);

(df.assign(col3=lambda x: np.where(s, 'xz', x['col3']), # replace xx and xy with xz
           mask=s,                                      # where xx and xy
           block=(~s).cumsum())                         # block of xx and xy
   .drop_duplicates(['col1','mask','block'])
   .drop(['mask','block'], axis=1)
)

输出:

  col1  col2 col3
0    a     1    a
1    a    98   xz
3    b     1    a
4    b     2    b
5    b     3    c
6    b     8   xz