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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了熊猫:drop_duplicates()。fillna没有填充零相关的知识,希望对你有一定的参考价值。

我试图从一个系列中删除重复,然后用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。

答案

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
另一答案

因为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

以上是关于熊猫:drop_duplicates()。fillna没有填充零的主要内容,如果未能解决你的问题,请参考以下文章

关于熊猫代码的pyspark meandays计算

熊猫选择没有重复的行[重复]

熊猫删除特殊情况下的副本

pandas.DataFrame.drop_duplicates

col.drop_duplicates() 有更快的替代方法吗?

python用drop_duplicates()函数保留数据集的重复行