gpt4 book ai didi

python - 如何对两个数据帧之间的缺失数据进行计数和应用合并?

转载 作者:行者123 更新时间:2023-12-04 03:31:37 26 4
gpt4 key购买 nike

我正在尝试用缺失数据填充数据框。我有这两个数据框:

df1:

df1 = pd.DataFrame({'a':['11','11','11','11','22','22','43','43'], 'x': ['d1', 'd2','d3','d4','d1','d2','d1','d3'], 'b': [1, 2,3,4,5,6,7,8]})

a x b
0 11 d1 1
1 11 d2 2
2 11 d3 3
3 11 d4 4
4 22 d1 5
5 22 d2 6
6 43 d1 7
7 43 d3 8

df2:

df2 = pd.DataFrame({'x': ['d1', 'd2','d3','d4']})

x
0 d1
1 d2
2 d3
3 d4

我试过这样做:

df1.groupby('a', as_index=False).apply(lambda d: d.merge(df2, on='x', how='right')).reset_index(drop=True)

但我的结果是:

      a   x    b
0 11 d1 1.0
1 11 d2 2.0
2 11 d3 3.0
3 11 d4 4.0
4 22 d1 5.0
5 22 d2 6.0
6 NaN d3 NaN
7 NaN d4 NaN
8 NaN d2 NaN
9 NaN d4 NaN
10 43 d1 7.0
11 43 d3 8.0

我想要的输出是:

     a   x    b
0 11 d1 1.0
1 11 d2 2.0
2 11 d3 3.0
3 11 d4 4.0
4 22 d1 5.0
5 22 d2 6.0
6 22 d3 NaN
7 22 d4 NaN
8 43 d1 7.0
9 43 d2 NaN
10 43 d3 8.0
11 43 d4 NaN

是否可以在我需要的行中填充NaN表示的缺失数据?这样,当我需要在 行中时,我在 89 行中得到了 d2d4 >1011

我的数据框大约有 150-200 行,所以我尽量保持这种通用性

最佳答案

为了性能 groupbymerge 不是好主意。更好的方法是为 ax 列创建包含所有可能组合的 MultiIndex 并使用 DataFrame.reindex :

mux = pd.MultiIndex.from_product([df1['a'].unique(), df2['x']], names=['a','x'])
df = df1.set_index(['a','x']).reindex(mux).reset_index()
print (df)
a x b
0 11 d1 1.0
1 11 d2 2.0
2 11 d3 3.0
3 11 d4 4.0
4 22 d1 5.0
5 22 d2 6.0
6 22 d3 NaN
7 22 d4 NaN
8 43 d1 7.0
9 43 d2 NaN
10 43 d3 8.0
11 43 d4 NaN

然后,如果需要通过 b 列中的缺失值来设置 a 并通过 a 将它们放到组的末尾,请使用:

df = (df.assign(tmp = df['b'].isna())
.sort_values(['a','tmp'])
.assign(a = lambda x: x['a'].mask(x['b'].isna()))
.drop('tmp', axis=1))

print (df)
a x b
0 11 d1 1.0
1 11 d2 2.0
2 11 d3 3.0
3 11 d4 4.0
4 22 d1 5.0
5 22 d2 6.0
6 NaN d3 NaN
7 NaN d4 NaN
8 43 d1 7.0
10 43 d3 8.0
9 NaN d2 NaN
11 NaN d4 NaN

关于python - 如何对两个数据帧之间的缺失数据进行计数和应用合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66709300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com