熊猫:drop_duplicates()。fillna(0)没有填充零

问题描述 投票:2回答:2

我试图从一个系列中删除重复,然后用0填充NaNs。应该非常简单,但是当我将两个函数链接在一起时,我仍然得到NaN,我期望0.0

df = pd.DataFrame({'a':[1,1,2,3,3,4], 'b':[10,20,30,40,50,60]})
df['a'] = df['a'].drop_duplicates().fillna(0)

收益率:

     a   b
0  1.0  10
1  NaN  20
2  2.0  30
3  3.0  40
4  NaN  50
5  4.0  60

鉴于:

df['a'] = df['a'].drop_duplicates()
df['a'] = df['a'].fillna(0)

工作正常,但似乎不必要地冗长。

我在大熊猫0.20.3。

python pandas duplicates nan
2个回答
1
投票

drop_duplicates删除一些值并对齐创建NaNs值后出现问题。所以reindex在这里帮助:

df['a'] = df['a'].drop_duplicates().reindex(df.index, fill_value=0)
print (df)
   a   b
0  1  10
1  0  20
2  2  30
3  3  40
4  0  50
5  4  60

或者使用duplicatedloc

df.loc[df['a'].duplicated(), 'a'] = 0
print (df)
   a   b
0  1  10
1  0  20
2  2  30
3  3  40
4  0  50
5  4  60

3
投票

因为drop_duplicates删除了元素,所以结果的大小比您指定的数据帧小。这会导致索引不匹配。

或者,使用mask / whereduplicated -

df['a'] = df['a'].mask(df['a'].duplicated(), 0)

要么,

df['a'] = df['a'].where(~df['a'].duplicated(), 0)
df

   a   b
0  1  10
1  0  20
2  2  30
3  3  40
4  0  50
5  4  60
© www.soinside.com 2019 - 2024. All rights reserved.