pandas 使用panda groupby中的唯一值进行填充

xqk2d5yq  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(142)
df = pd.DataFrame({'value': [1, np.nan, np.nan, 2, 3, 1, 3, np.nan, 3], 'name': ['A','A', 'B','B','B','B', 'C','C','C']})

  name  value
0    A      1
1    A    NaN
2    B    NaN
3    B      2
4    B      2
5    B      2
6    C      3
7    C    NaN
8    C      3

在上面的数据框中,我想使用groupby来填充每个组的缺失值(基于name列),使用每个组的unique值。确保每个组都有一个唯一的值,除了NaNs。我该怎么做?

6fe3ivhb

6fe3ivhb1#

如果我们参考你的插图,我认为你的虚拟 Dataframe 中有一个错误,所以我修改了它。

    • 提议的其他解决办法**
import pandas as pd

df = pd.DataFrame({'value': [1, np.nan, np.nan, 2, 2, 2, 3, np.nan, 3], 
                   'name': ['A','A', 'B','B','B','B', 'C','C','C']})

r  = (df.groupby('name')
        .apply(lambda g: g.fillna([x for x in g['value'].unique() if x == x][0]))
       )

print(r)
value name
0    1.0    A
1    1.0    A
2    2.0    B
3    2.0    B
4    2.0    B
5    2.0    B
6    3.0    C
7    3.0    C
8    3.0    C
    • 说明**

此代码基于以下属性

>>> import numpy as np
3 == 3
True
>>> np.nan == np.nan
False

相关问题