为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用另一个较小的 pandas 数据框过滤 pandas 数据框

如何使用另一个较小的 pandas 数据框过滤 pandas 数据框

米脂 2023-07-11 15:32:26
我有 2 个数据框,第一个看起来像这样df1:    MONEY    Value0    EUR      8501    USD      7502    CLP        13    DCN        1df2:      Money0      USD1      USD2      USD3      USD4      EGP...    ...25984  USD25985  DCN25986  USD25987  CLP25988  USD我想删除 df1 中不存在的 df2 的“金钱”值。并添加 df1 中“Value”列的任意列值  Money    Value0      USD      7201      USD      7202      USD      7203      USD      720...    ...25984  USD      72025985  DCN        125986  USD      72025987  CLP        125000  USD      720
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

一步步:

df1.set_index("MONEY")["Value"]

此代码将列转换MONEY为Dataframe索引。结果是:


    print(df1)


    MONEY

    EUR    850

    USD    150

    DCN      1

df2["Money"].map(df1.set_index("MONEY")["Value"])

此代码将 的内容映射df2到df1。这将返回以下内容:


    0    150.0

    1      NaN

    2    850.0

    3      NaN

df2现在我们将前一列分配给名为的新列Value。把它们放在一起:

df2["Value"] = df2["Money"].map(df1.set_index("MONEY")["Value"])

df2现在看起来像:


     Money  Value

    0   USD  150.0

    1   GBP    NaN

    2   EUR  850.0

    3   CLP    NaN

只剩下一件事要做:删除任何有价值的行NaN:

df2.dropna(inplace=True)

整个代码示例:


import pandas as pd


# Create df1

x_1 = ["EUR", 850], ["USD", 150], ["DCN", 1]

df1 = pd.DataFrame(x_1, columns=["MONEY", "Value"])


# Create d2

x_2 = "USD", "GBP", "EUR", "CLP"

df2 = pd.DataFrame(x_2, columns=["Money"])


# Create new column in df2 called 'Value'

df2["Value"] = df2["Money"].map(df1.set_index("MONEY")["Value"])

# Drops any rows that have 'NaN' in column 'Value'

df2.dropna(inplace=True)

print(df2)

输出:


Money  Value

0   USD  150.0

2   EUR  850.0


查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信