gpt4 book ai didi

python - Pandas:根据两个条件进行搜索和匹配

转载 作者:行者123 更新时间:2023-12-05 09:01:15 30 4
gpt4 key购买 nike

我正在使用下面的代码对 .csv 文件进行搜索并匹配两个文件中的列并获取我想要的不同列并将其添加为新列。但是,我试图根据两列而不是一列进行匹配。有办法做到这一点吗?

import pandas as pd
df1 = pd.read_csv("matchone.csv")
df2 = pd.read_csv("comingfrom.csv")

def lookup_prod(ip):
for row in df2.itertuples():
if ip in row[1]:
return row[3]
else:
return '0'

df1['want'] = df1['name'].apply(lookup_prod)

df1[df1.want != '0']
print(df1)
#df1.to_csv('file_name.csv')

上面的代码从两个文件中的列名“samename”进行搜索,并从 df2 中获取我请求的列 ([3])。我想让代码匹配“name”列和另一列“price”,并且只有当 df1 和 df2 中的两列都匹配时,代码才取值 ([3])。

df 1 :

name price value
a 10 35
b 10 21
c 10 33
d 10 20
e 10 88

df 2 :
name price want
a 10 123
b 5 222
c 10 944
d 10 104
e 5 213

当代码运行时(如果 df1 名称 = df2 名称,则从 d2 请求 want 列)产生的结果是:

name price value want
a 10 35 123
b 10 21 222
c 10 33 944
d 10 20 104
e 10 88 213

但是,我想要的是如果 df1 name = df2 name 和 df1 price = df2 price,那么取 df2 want 列,所以期望的结果是:

name price value want
a 10 35 123
b 10 21 0
c 10 33 944
d 10 20 104
e 10 88 0

最佳答案

您需要使用具有多个键的 pandas.DataFrame.merge() 方法:

df1.merge(df2, on=['name','price'], how='left').fillna(0)

方法将缺失值表示为 NaN,因此该列的 dtype 更改为 float64 但您可以在用 0 填充缺失值后将其更改回。

另请注意,df2nameprice 的重复组合将在结果中多次出现。

关于python - Pandas:根据两个条件进行搜索和匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73766982/

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