假设我有一个看起来像这样的数据框:
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
= xy
和col1
中的行,因此结果数据帧看起来像:
col1 col2 col3
a 1 a
a 98 xz
b 1 a
b 2 b
b 3 c
b 8 xz
是否有一种简单的方法pandas
?
答案 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