我正在尝试从一个系列中删除重复项,然后用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上。
答案 0 :(得分:3)
由于drop_duplicates
删除了元素,因此您的结果的大小小于您分配给的数据帧。这会导致索引不匹配。
或者,将mask
/ where
与duplicated
-
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
或者使用duplicated
与loc
:
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