在数据框中创建新列,该列包含来自另一个数据框的匹配值。

6

有两个数据框,一个数据框(df1)包含少量信息,另一个数据框(df2)则包含所有数据。我想在df1中创建一个新列,该列查找Total2值,并根据Names将其填充到新列中。请注意,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
1个回答

14

需要先通过Seriesmap方法为新列添加值:

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()

谢谢!我会学习这些函数并将其应用到我的全局代码中。 - Gonzalo
你知道当我们想要复制df2中所有匹配索引的列时该怎么做吗?例如,在这种情况下,我们只有"total2",如果还有5个列,我们想将所有6个列包括在df1中,应该怎么办? - Aisha
@Aisha -- 不确定是否理解,你能看一下这个吗? - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接