gpt4 book ai didi

python - 如何使用另一个数据框的子集填充数据框的列?

转载 作者:太空狗 更新时间:2023-10-30 00:58:12 25 4
gpt4 key购买 nike

我有两个这样的数据框

import pandas as pd
import numpy as np

df1 = pd.DataFrame({
'key': list('AAABBCCAAC'),
'prop1': list('xyzuuyxzzz'),
'prop2': list('mnbnbbnnnn')
})

df2 = pd.DataFrame({
'key': list('ABBCAA'),
'prop1': [np.nan] * 6,
'prop2': [np.nan] * 6,
'keep_me': ['stuff'] * 6
})

key prop1 prop2
0 A x m
1 A y n
2 A z b
3 B u n
4 B u b
5 C y b
6 C x n
7 A z n
8 A z n
9 C z n

key prop1 prop2 keep_me
0 A NaN NaN stuff
1 B NaN NaN stuff
2 B NaN NaN stuff
3 C NaN NaN stuff
4 A NaN NaN stuff
5 A NaN NaN stuff

我现在想使用 df1 的值填充 df2 中的列 prop1prop2。对于每个键,我们将在 df1 中拥有比在 df2 中更多或相等的行(在上面的示例中:5 倍 A vs 3 倍 A,2 次 B vs 2 次 B 和 3 次 C vs 1 次 C).对于每个键,我想使用 df1 中每个键的前 n 行来填充 df2

因此,我对 df2 的预期结果是:

  key prop1 prop2 keep_me
0 A x m stuff
1 B u n stuff
2 B u b stuff
3 C y b stuff
4 A y n stuff
5 A z b stuff

由于 key 不是唯一的,我不能简单地构建一个字典然后使用 .map

我希望这些方面的东西能奏效:

pd.concat([df2.set_index('key'), df1.set_index('key')], axis=1, join='inner')

但是失败了

ValueError: Shape of passed values is (5, 22), indices imply (5, 10)

因为 - 我猜 - 索引包含非唯一值。

我怎样才能得到我想要的输出?

最佳答案

因为 key 值中存在重复项,可能的解决方案是通过 GroupBy.cumcount 在两个 DataFrame 中创建新的计数器列,因此可能用 keyg 列与 DataFrame.fillna 创建的 MultiIndex 对齐替换 df2 中的缺失值:

df1['g'] = df1.groupby('key').cumcount()
df2['g'] = df2.groupby('key').cumcount()

print (df1)
key prop1 prop2 g
0 A x m 0
1 A y n 1
2 A z b 2
3 B u n 0
4 B u b 1
5 C y b 0
6 C x n 1
7 A z n 3
8 A z n 4
9 C z n 2

print (df2)
key prop1 prop2 keep_me g
0 A NaN NaN stuff 0
1 B NaN NaN stuff 0
2 B NaN NaN stuff 1
3 C NaN NaN stuff 0
4 A NaN NaN stuff 1
5 A NaN NaN stuff 2

df = (df2.set_index(['key','g'])
.fillna(df1.set_index(['key','g']))
.reset_index(level=1, drop=True)
.reset_index())
print (df)
key prop1 prop2 keep_me
0 A x m stuff
1 B u n stuff
2 B u b stuff
3 C y b stuff
4 A y n stuff
5 A z b stuff

关于python - 如何使用另一个数据框的子集填充数据框的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57787736/

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