【问题标题】:Create new column in dataframe with match values from other dataframe在数据框中创建具有来自其他数据框的匹配值的新列
【发布时间】:2018-03-29 02:00:08
【问题描述】:

有两个数据框,一个包含少量信息(df1),另一个包含所有数据(df2)。我正在尝试在 df1 的新列中创建的内容,该列查找 Total2 值并根据名称相应地填充新列。请注意,df1 中可见的名称将始终在 df2 的名称中找到匹配项。我想知道 Pandas 中是否有一些功能已经做到了这一点?我的最终目标是创建一个条形图。

alldatapath = "all_data.csv"
filteredpath = "filtered.csv"

import pandas as pd

df1 = pd.read_csv(
    filteredpath,     # file name
    sep=',',                    # column separator
    quotechar='"',              # quoting character
    na_values="NA",                # fill missing values with 0
    usecols=[0,1],     # columns to use
    decimal='.')                # symbol for decimals

df2 = pd.read_csv(
    alldatapath,     # file name
    sep=',',                    # column separator
    quotechar='"',              # quoting character
    na_values="NA",                # fill missing values with 0
    usecols=[0,1],     # columns to use
    decimal='.')                # symbol for decimals

df1 = df1.head(5) #trim to top 5

print(df1)
print(df2)

输出(df1):

         Name  Total
0  Accounting      3
1   Reporting      1
2     Finance      1
3       Audit      1
4    Template      2

输出(df2):

          Name   Total2
0    Reporting    100
1   Accounting    120
2      Finance    400
3        Audit    500
4  Information     50
5     Template   1200
6      KnowHow   2000

最终输出 (df1) 应该是这样的:

         Name  Total  Total2(new column)
0  Accounting      3    120
1   Reporting      1    100
2     Finance      1    400
3       Audit      1    500
4    Template      2   1200

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    需要map by Series 优先用于新列:

    df1['Total2'] = df1['Name'].map(df2.set_index('Name')['Total2'])
    print (df1)
             Name  Total  Total2
    0  Accounting      3     120
    1   Reporting      1     100
    2     Finance      1     400
    3       Audit      1     500
    4    Template      2    1200
    

    然后set_indexDataFrame.plot.bar

    df1.set_index('Name').plot.bar()
    

    【讨论】:

    • 谢谢!我将研究这些函数并将其应用到我的全局代码中。
    • 当我们要复制df2中匹配索引的所有列时,您知道该怎么做吗?例如在这种情况下,我们只有“total2”,如果还有 5 列并且我们想将所有 6 列包含到 df1 怎么办?
    • @Aisha -- 不知道是否明白,你能查一下this吗?
    猜你喜欢
    • 2016-12-27
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2016-03-05
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多