python - 匹配来自两个不同数据帧的列值和配对观察

标签 python pandas

所以我不知道该怎么做,查了半天我没有找到我的解决方案。

我的数据看起来像这样

import pandas as pd

df1 = pd.DataFrame(
    [['132','233','472','098'], ['482','214','980',''], ['107','','',''], 
    ['571','498','',''],], columns=["p1", "p2", "p3", "p4"])
df2 = pd.DataFrame(['532','233','980','132', '298'], columns=["p"])
df1
    p1      p2      p3
0   132     233     472
1   482     214     980
2   107         
3   571     498     

df2
    p
0   532
1   233
2   980
3   132
4   298

我希望将 p 列中的值与 p{1-3} 列中的任意一个值进行匹配,并创建一个包含匹配字符串的新列。

所以在这个例子中我想要的输出是

df_output

    p1      p2      p3    matched_p 
0   132     233     472   233
1   482     214     980   980
2   107         
3   571     498     

我尝试了以下方法

filter1 = df1['p1'].isin(df2['p'])
filter2 = df1['p2'].isin(df2['p'])
filter3 = df1['p3'].isin(df2['p'])
df1['matched_p'] = df2['p'][filter1 | filter2 | filter3]

但是,这给了我毫无意义的结果。

关于如何解决这个问题有什么想法吗?

最佳答案

你可以试试这个。使用df.isindf.wheredf.max超过轴 1。

df1 = df1.replace('',np.nan).astype(float) # to convert everything to float.
df2 = df2.astype(float) #to convert everything to float.
m = df1.isin(df2['p'].to_numpy())
df1['matched_values'] = df1.where(m,0).max(1)
df1

      p1     p2     p3    p4  matched_values
0  132.0  233.0  472.0  98.0           233.0
1  482.0  214.0  980.0   NaN           980.0
2  107.0    NaN    NaN   NaN             NaN
3  571.0  498.0    NaN   NaN             NaN

如果您不想将数据类型转换为float

灵感来自@Erfan's解决方案。我结合了我们的方法。

df1['matched'] = (df1.where(
                  df1.isin(df2['p'].to_numpy()),'').
                  add(',').sum(1).str.strip(','))

关于python - 匹配来自两个不同数据帧的列值和配对观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62179877/

相关文章:

python - 使用 Python 组合多个 RSS 提要的最佳算法

python - 值错误 : You must specify a period or x must be a pandas object with a DatetimeIndex with a freq not set to None

python - HTTPS 中的 Flask 代理服务器错误 - 适用于 HTTP 但不适用于 HTTPS

python - Pandas 数据框中最大值的索引和列

python - 使用 reduce 选项更改数据类型的 Pandas 调用适用于空数据框

python - CountVectorizer 但对于文本组

python - 无法从另一个类python访问变量

Python:使用 Statsmodels - 线性回归预测 y 值

python - 如何将 Pandas Dataframe 转换为所需的 Json 格式

python - 如何通过 Pandas 或 Spark 数据框删除所有行中具有相同值的列?