【问题标题】:If values from two columns in two different data frames match then copy values from another column in df2 to column in df1如果两个不同数据帧中两列的值匹配,则将 df2 中另一列的值复制到 df1 中的列
【发布时间】:2019-04-22 14:08:16
【问题描述】:

我有两个数据框,我想将 df2 中的“Result2”列中的值复制到 df1 中的“Result1”列,并将 df2 中的“描述”列添加到 df1 中以获取同一行中的值如果两个数据框中的“ID”列中的值匹配,则作为“Result2”列中的值(已复制)。

以下是数据框:

df1

ID              Result1
Position1       NaN
MRS1            OK
MRS2            Maybe
MRS3            NOK
Position2       NaN
MRS4            OK
MRS5            OK
Position3       NaN
MRS6            OK
Position4       NaN
MRS7            NOK
MRS8            OK
MRS9            NOK
MRS10           Excellent

df2

ID              Result2              Description
text            NaN                  NaN
NaN             NaN                  text
text            NaN                  NaN
MRS1            OK                   New
MRS2            OK                   Old
NaN             NaN                  NaN
NaN             NaN                  text
MRS3            OK                   New
MRS4            OK                   New
MRS5            OK                   NaN
MRS6            NOK                  Very old
NaN             text                 NaN
text            text                 NaN
NaN             NaN                  NaN
MRS7            Excellent            Very old
MRS8            Excellent            Old
text            text                 text
MRS9            Excellent            New
NaN             NaN                  NaN
MRS10           NOK                  New

我想得到:

ID              Result1             Result2
Position1       NaN                  NaN
MRS1            OK                   New
MRS2            OK                   Old
MRS3            OK                   New
Position2       NaN                  NaN
MRS4            OK                   New
MRS5            OK                   NaN            
Position3       NaN                  NaN
MRS6            NOK                  Very old
Position4       NaN                  NaN
MRS7            Excellent            Very old
MRS8            Excellent            Old
MRS9            Excellent            New
MRS10           NOK                  New

我把 NaN 放在应该是空单元格的地方。如何在熊猫中做到这一点? 我尝试了合并,但我遇到了问题,因为它需要相同长度的比较列。我只想比较两个数据帧中“ID”列的值,而这些列的长度不同。

【问题讨论】:

    标签: python pandas dataframe matching


    【解决方案1】:

    merge 与仅列ID 与左连接和rename 列一起使用:

    df = (df1[['ID']].merge(df2, on='ID', how='left')
                     .rename(columns={'Result2':'Result1','Description':'Result2'}))
    print (df)
               ID    Result1   Result2
    0   Position1        NaN       NaN
    1        MRS1         OK       New
    2        MRS2         OK       Old
    3        MRS3         OK       New
    4   Position2        NaN       NaN
    5        MRS4         OK       New
    6        MRS5         OK       NaN
    7   Position3        NaN       NaN
    8        MRS6        NOK  Very old
    9   Position4        NaN       NaN
    10       MRS7  Excellent  Very old
    11       MRS8  Excellent       Old
    12       MRS9  Excellent       New
    13      MRS10        NOK       New
    

    【讨论】:

    • 非常感谢。它工作得很好。我犯了一个错误,我想保留“Description”列的名称,而是输入了“Result2”。
    • 请问我在df1中是否还有一列需要保留在final中,我应该怎么做?该列的长度与 df1 中的“ID”相同。
    • @slobokv83 - 仅将 df1[['ID']] 更改为 df1
    • 对不起,我这样问你,但是它是一种将Excel数据导入ppt幻灯片的方法吗?我找到了 python-pptx 库并使用了它,但我找不到从 excel 导入数据的方法。另外,我在读取 Excel 文件时找不到保持格式的方法,但我可以在之后设置它。
    • @slobokv83 + 抱歉,从不这样做,所以我没有经验 :(
    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2020-09-20
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多