gpt4 book ai didi

pandas - 根据条件从另一个数据框中复制列值

转载 作者:行者123 更新时间:2023-12-05 05:02:33 26 4
gpt4 key购买 nike

假设我有两个数据帧:df1 和 df2。假定以下初始值。

df1=pd.DataFrame({'ID':['ASX-112','YTR-789','ASX-124','UYT-908','TYE=456','ERW-234','UUI-675','GHV-805','NMB-653','WSX-123'],
'Costperlb':[4515,5856,3313,9909,8980,9088,6765,3456,9012,1237]})
df2=df1[df1['Costperlb']>4560]

如您所见,df2 是 df1 的真子集(它是通过对行选择施加条件从 df1 创建的)。

我向 df2 添加了一列,其中包含基于计算的某些值。让我们称之为 df2['grade']。

df2['grade']=[1,4,3,5,1,1]

df1 和 df2 包含一个名为“ID”的列,保证在每个数据帧中都是唯一的。

我想:

  1. 在 df1 中创建一个新列并将其初始化为 0。简单。 df1['grade']=0
  2. 将 df2['grade'] 值复制到 df1['grade'],确保每个此类副本的 df1['ID']=df2['ID']

结果应该是复制过来的相应 ID 的成绩值。

第 2 步让我有点困惑。天真的 df1['grade']=df2['grade'].values 显然不起作用,因为两个数据帧的长度不同。

现在,如果我足够努力地思考,我可能想出一个像这样的怪物:

df1['grade'].loc[(df1['ID'].isin(df2)) & ...] 但我不愿意这样做。

我是 python 的新手,此外,在这次分配之后,df1 的索引正在其他地方使用,我不想删除索引,重置索引,因为我发现的一些搜索结果中建议了一些解决方案.

我只想找出 df1 中“ID”行与 df2 中“ID”行匹配的行,然后复制该特定行中的“等级”列值。我该怎么做?

最佳答案

您的代码:

df1=pd.DataFrame({'ID':['ASX-112','YTR-789','ASX-124','UYT-908','TYE=456','ERW-234','UUI-675','GHV-805','NMB-653','WSX-123'],
'Costperlb':[4515,5856,3313,9909,8980,9088,6765,3456,9012,1237]})
df2=df1[df1['Costperlb']>4560]
df2['grade']=[1,4,3,5,1,1]

您可以将合并与“左”结合使用。通过这种方式,df1 的索引得以保留:

new_df = df1.merge(df2[["ID","grade"]], on="ID", how="left")
new_df["grade"] = new_df["grade"].fillna(0)
new_df

输出:

    ID   Costperlb grade
0 ASX-112 4515 0.0
1 YTR-789 5856 1.0
2 ASX-124 3313 0.0
3 UYT-908 9909 4.0
4 TYE=456 8980 3.0
5 ERW-234 9088 5.0
6 UUI-675 6765 1.0
7 GHV-805 3456 0.0
8 NMB-653 9012 1.0
9 WSX-123 1237 0.0

这里我将合并后的数据帧命名为 new_df,但你可以简单地将其更改为 df1。

编辑

如果您想用字符串替换 NaN 而不是 0,请尝试以下操作:

new_df = df1.merge(df2[["ID","grade"]], on="ID", how="left")
new_df["grade"] = new_df["grade"].fillna("No transaction possible")
new_df

输出:

    ID    Costperlb       grade
0 ASX-112 4515 No transaction possible
1 YTR-789 5856 1
2 ASX-124 3313 No transaction possible
3 UYT-908 9909 4
4 TYE=456 8980 3
5 ERW-234 9088 5
6 UUI-675 6765 1
7 GHV-805 3456 No transaction possible
8 NMB-653 9012 1
9 WSX-123 1237 No transaction possible

关于pandas - 根据条件从另一个数据框中复制列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62133801/

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