gpt4 book ai didi

python - 使用 dataframe2 中设置的条件从 dataframe1 中提取值(pandas,python)

转载 作者:行者123 更新时间:2023-12-03 15:48:23 24 4
gpt4 key购买 nike

我有两个日期框(df1 和 df2),我想弄清楚如何使用 df2 中的条件从 df1 中提取值并使用 df2 中提取的值。

df1 = 精确值

df2 = 提取值的使用条件和 df

条件:df2.HJ = df1HJ & df2.JK = df1 P colum
示例 if df2(df2.HJ = 99 & df2.JK = P3); Ans = 67 (from df1)
df1

╔════╦════╦══════╦══════╦══════╦══════╗║ HJ ║ P1 ║  P2  ║  P3  ║  P4  ║  P5  ║╠════╬════╬══════╬══════╬══════╬══════╣║  5 ║ 51 ║  33  ║  21  ║  31  ║  13  ║║ 11 ║ 66 ║  45  ║  21  ║  49  ║  58  ║║ 21 ║  7 ║  55  ║  56  ║  67  ║  73  ║║ 99 ║  0 ║  76  ║  67  ║  98  ║  29  ║║ 15 ║ 11 ║  42  ║  79  ║  27  ║  54  ║╚════╩════╩══════╩══════╩══════╩══════╝

df2

╔════╦════╗║ HJ ║ JK ║╠════╬════╣║ 99 ║ P1 ║║ 11 ║ P5 ║║  5 ║ P3 ║║ 21 ║ P2 ║║ 11 ║ P3 ║╚════╩════╝

expected result for df2 after exaction from df1

╔════╦════╦═══════╗║ HJ ║ JK ║  Ans  ║╠════╬════╬═══════╣║ 99 ║ P1 ║    0  ║║ 11 ║ P5 ║   58  ║║  5 ║ P3 ║   21  ║║ 21 ║ P2 ║   55  ║║ 11 ║ P3 ║   21  ║╚════╩════╩═══════╝

code for df1

import pandas as pd
import numpy as np
data = {'HJ':[5,11,21,99,15],
'P1':[51,66,7,0,11]
,'P2':[ 33,45,55 ,76 ,42]
,'P3':[ 21 ,21 ,56 ,67 ,79]
,'P4':[ 31 ,49 ,67 ,98 ,27]
,'P5':[ 13 ,58 ,73 ,29 ,54]}
df1 = pd.DataFrame(data)

df2 的代码
data = {'HJ':[99,11,5,21,11],
'JK':['P1','P5','P3','P2','P3']}
df2 = pd.DataFrame(data)

问候
谢谢

============

更新

@Scott Boston 的解决方案有效:
df2['ans'] = df1.set_index('HJ').lookup(df2['HJ'], df2['JK']) 

但是,当没有找到标签时,会出现 KeyError: '一个或多个行标签未找到'。有没有办法克服这个问题?

最佳答案

使用 pd.DataFrame.lookup之后 set_index :

df2['ans'] = df1.set_index('HJ').lookup(df2['HJ'], df2['JK'])
print(df2)

输出:
   HJ  JK  ans
0 99 P1 0
1 11 P5 58
2 5 P3 21
3 21 P2 55
4 11 P3 21

使用查找,您必须先过滤输入以查找:
df2m = df2[df2['HJ'].isin(df1['HJ']) & df2['JK'].isin(df1.columns)].copy()

df2m['ans'] = df1.set_index('HJ').lookup(df2m['HJ'],df2m['JK'])

df2.update(df2m)

df2m.combine_first(df2)

关于python - 使用 dataframe2 中设置的条件从 dataframe1 中提取值(pandas,python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62287271/

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