Man*_*oon 5 python dataframe pandas
我有两个日期框(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
?????????????????????????????????????????? ? 何洁?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
???????????? ? 何洁?JK ? ???????????? ? 99 ? P1 ? ? 11 ? P5 ? ? 5 ? P3 ? ? 21 ? P2 ? ? 11 ? P3 ? ????????????
从 df1 提取后 df2 的预期结果
????????????????????? ? 何洁?JK ? 答案? ????????????????????? ? 99 ? P1 ? 0 ? ? 11 ? P5 ? 58 ? ? 5 ? P3 ? 21 ? ? 21 ? P2 ? 55 ? ? 11 ? P3 ? 21 ? ?????????????????????
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)
Run Code Online (Sandbox Code Playgroud)
df2 的代码
data = {'HJ':[99,11,5,21,11],
'JK':['P1','P5','P3','P2','P3']}
df2 = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)
问候 谢谢
============
@Scott Boston 的解决方案有效:
df2['ans'] = df1.set_index('HJ').lookup(df2['HJ'], df2['JK'])
Run Code Online (Sandbox Code Playgroud)
但是,当没有找到标签时,会出现 KeyError: 'One or more row labels not found'。有没有办法克服这个问题?
pd.DataFrame.lookup
之后使用set_index
:
df2['ans'] = df1.set_index('HJ').lookup(df2['HJ'], df2['JK'])
print(df2)
Run Code Online (Sandbox Code Playgroud)
输出:
HJ JK ans
0 99 P1 0
1 11 P5 58
2 5 P3 21
3 21 P2 55
4 11 P3 21
Run Code Online (Sandbox Code Playgroud)
使用查找,您必须先过滤输入以查找:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
181 次 |
最近记录: |