gpt4 book ai didi

python - 如何根据另一个数据框中的列填充数据框中的空值?

转载 作者:行者123 更新时间:2023-11-28 21:32:45 25 4
gpt4 key购买 nike

我有一个名为df1的数据框:

ID     Value       Name      Score
-1 10 A -1
-1 5 B -1
NaN 0.2 Track C 100
NaN 0.5 Track C 200
1 0 D 100
5 0 D 200

我想用数据帧 df2 中的多行 Score 数据填充 ID 列中的 NaN

df2:

Score    ID
100 1
100 2
100 3
100 4
200 5
200 6
200 7

最终,我的最终数据框如下所示:df3:

ID     Value       Name      Score
-1 10 A -1
-1 5 B -1
1 0.2 Track C 100
2 0.2 Track C 100
3 0.2 Track C 100
4 0.2 Track C 100
5 0.5 Track C 200
6 0.5 Track C 200
7 0.5 Track C 200
1 0 D 100
5 0 D 200

我怎样才能做到这一点?

最佳答案

我有一个解决方案,但它并不优雅,请有经验的用户看一下。

为了方便其他人,以下是设置测试用例的代码:

df1 = pd.DataFrame(
columns=\
'ID Value Name Score'.split(),

data = [
re.split('\s{2,}', line) for line in \
"""
-1 10 A -1
-1 5 B -1
NaN 0.2 Track C 100
NaN 0.5 Track C 200
1 0 D 100
5 0 D 200
""".strip().split('\n')
],
)

df1 = df1.replace({'NaN':np.nan})

df2 = pd.DataFrame(

columns=\
'Score ID'.split(),

data = [
re.split('\s{2,}', line) for line in \
"""
100 1
100 2
100 3
100 4
200 5
200 6
200 7
""".strip().split('\n')
],
)

我的解决方案是:

"""
the general first reaction is to pd.merge().
however the hurdle is, how to deal with the fillna of the column "ID".
mine works, but it is too hard coded.
"""

df = pd.merge(left=df1, right=df2, on='Score', how='left')

df['ID'] = df['ID_x'].fillna(df['ID_y'])

finalresult = df.drop(columns=['ID_x', 'ID_y']).drop_duplicates(subset=['ID','Name'])

输出:

   Value     Name Score  ID
0 10 A -1 -1
1 5 B -1 -1
2 0.2 Track C 100 1
3 0.2 Track C 100 2
4 0.2 Track C 100 3
5 0.2 Track C 100 4
6 0.5 Track C 200 5
7 0.5 Track C 200 6
8 0.5 Track C 200 7
9 0 D 100 1
13 0 D 200 5

关于python - 如何根据另一个数据框中的列填充数据框中的空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55875406/

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