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

时间:2018-01-20 12:42:52

标签: python pandas duplicates nan

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

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

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

我在大熊猫0.20.3上。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

删除drop_duplicates某些值并对齐创建NaN的值后,会出现问题。所以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