【问题标题】:extracting values from dataframe1 using conditions set in dataframe2 (pandas, python) _ Part 2使用 dataframe2 (pandas, python) 中设置的条件从 dataframe1 中提取值_第 2 部分
【发布时间】:2020-07-30 11:01:10
【问题描述】:

我过去问过一个类似的问题,但是,它的过滤条件不同。因此,我发布了这个:

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

df1 = 精确值

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

条件:df2.ans = df2HJ & df2.P1 = df1 P2 colum

示例if df2(df2.HJ = 99 & df2.P1 = 0); Ans = 76 (from df1)

df1

╔════╦════╦══════╦ ║ HJ ║ P1 ║ P2 ║ ╠════╬════╬══════╬ ║ 5 ║ 51 ║ 33 ║ ║ 11 ║ 66 ║ 45 ║ ║ 21 ║ 7 ║ 55 ║ ║ 99 ║ 0 ║ 76 ║ ║ 15 ║ 11 ║ 42 ║ ╚════╩════╩══════╩

df2

╔════╦════╗ ║ HJ ║ P1 ║ ╠════╬════╣ ║ 99 ║ 0 ║ ║ 11 ║ 66 ║ ║ 5 ║ 51 ║ ║ 21 ║ 7 ║ ║ 11 ║ 66 ║ ╚════╩════╝

从 df1 提取后 df2 的预期结果

╔════╦════╦═══════╗ ║ HJ ║ P1 ║ Ans ║ ╠════╬════╬═══════╣ ║ 99 ║ 0 ║ 76 ║ ║ 11 ║ 66 ║ 45 ║ ║ 5 ║ 51 ║ 33 ║ ║ 21 ║ 7 ║ 55 ║ ║ 11 ║ 66 ║ 45 ║ ╚════╩════╩═══════╝

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]}
df1 = pd.DataFrame(data)

df2 的代码

data = {'HJ':[99,11,5,21,11],
'P1':['0','66','51','7','66']}
df2 = pd.DataFrame(data)

问候 谢谢

【问题讨论】:

  • 只需使用df2.astype({'P1': 'int'}).merge(df1, on=['HJ', 'P1'])
  • 这能回答你的问题吗? Pandas Merging 101

标签: python pandas dataframe


【解决方案1】:

我不知道你为什么要这个例子,导致你的预期结果是 df1 和其他顺序。

但是如果你想连接不同的数据帧,使用 .join 函数会很有用:Join panda's function

【讨论】:

  • 原始 df 要大得多,并且都包含不同的行数和列数。这些示例是缩短和简化的视图,以便于参考理解。干杯
  • 该链接非常有用,有助于纠正问题。谢谢
【解决方案2】:

感谢@Pol Renau Larrodé 的指点,我得以解决问题。

res = df2.merge(df1, how='inner', left_on=['HJ', 'P1'], right_on=['HJ', 'P1'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-18
    • 2021-05-01
    • 1970-01-01
    • 2021-12-03
    • 2021-09-17
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多