我有这个df(实际上,我有更多重复的行):
xx yy zz name
A 5 6 0 A
A 0 0 -1 A
C 6 7 5 C
如何合并那些索引相同的2行,并且只保留其中的值与零不同?所需的输出将是:
xx yy zz name
A 5 6 -1 A
C 6 7 5 C
答案 0 :(得分:2)
您可以尝试df.where
和groupby first
df.where(df.ne(0)).groupby(level=0).first()
Out[161]:
xx yy zz name
A 5.0 6.0 -1.0 A
C 6.0 7.0 5.0 C
答案 1 :(得分:1)
尝试
df.replace({0: None}).groupby(df.index).max()
xx yy zz name
A 5 6 7 A
C 6 7 5 C
它首先用None
替换0个元素,而max
中的groupby
则将其忽略。
答案 2 :(得分:1)
您还可以使用replace
,bfill
,query
和duplicated
:
df.replace(0, np.NaN).bfill().query('~index.duplicated()')
输出
xx yy zz name
A 5.0 6.0 -1.0 A
C 6.0 7.0 5.0 C