Python 使用Pandas,如何基于“中的一列组合多个工作表?”;母版纸;?

Python 使用Pandas,如何基于“中的一列组合多个工作表?”;母版纸;?,python,pandas,Python,Pandas,我在Excel表格中有9个不同的选项卡,每个选项卡都有不同的信息。在选项卡1(被认为是“主选项卡”)上,我有最完整的数据集,但我需要根据与主选项卡中特定列的匹配情况,从选项卡2-9添加一列信息 import pandas as pd df = pd.ExcelFile('AprilTest.xlsx') df1 = df.parse('MasterTab') df2 = df.parse('Tab2') check=pd.merge(df1, df2, on='ClientID', how=

我在Excel表格中有9个不同的选项卡,每个选项卡都有不同的信息。在选项卡1(被认为是“主选项卡”)上,我有最完整的数据集,但我需要根据与主选项卡中特定列的匹配情况,从选项卡2-9添加一列信息

import pandas as pd
df = pd.ExcelFile('AprilTest.xlsx')
df1 = df.parse('MasterTab')
df2 = df.parse('Tab2')


check=pd.merge(df1, df2, on='ClientID', how='left') 
MasterTab如下所示:

ClientID    val1    val2    val3
foo         bar     baz     12/2/16
cat         dog     pan     1/12/16
zzz         yyy     vvv     6/8/16
trick       lol     hmm     4/28/17
ClientID    val1    val2    val3    Metric Value
foo         bar     baz     12/2/16  16
cat         dog     pan     1/12/16  0
zzz         yyy     vvv     6/8/16   0
trick       lol     hmm     4/28/17  29
表2-9可能有相同的客户,他们可能有更多,他们可能有更少

示例表2:

Name   FavoriteColor   ClientID   Metric Value
Jodi   Green           foo        16
Kati   Purple          trick      29
Sam    Blue            bar        32
最后一张图纸应如下所示:

ClientID    val1    val2    val3
foo         bar     baz     12/2/16
cat         dog     pan     1/12/16
zzz         yyy     vvv     6/8/16
trick       lol     hmm     4/28/17
ClientID    val1    val2    val3    Metric Value
foo         bar     baz     12/2/16  16
cat         dog     pan     1/12/16  0
zzz         yyy     vvv     6/8/16   0
trick       lol     hmm     4/28/17  29
我在这里查看了一些资源:

但似乎一切都没有按我预期的方式进行。我现在得到的代码只是将df2添加到MasterTab的底部,这不是我需要的。我做错了什么?

试试这个

df1['Metric'] = df1.ClientID.map(df2.set_index('ClientID').MetricValue).fillna(0)
df1

你得到

    ClientID    val1    val2    val3    Metric
0   foo         bar     baz     12/2/16 16.0
1   cat         dog     pan     1/12/16 0.0
2   zzz         yyy     vvv     6/8/16  0.0
3   trick       lol     hmm     4/28/17 29.0

基本上,您只需要将“MetricValue”列添加到主数据中?如果将
.reset_index(drop=True)
添加到
df1=df.parse
df2=df.parse
行的末尾,会有帮助吗?你确定“ClientID”在df1和df2中的拼写完全相同吗?是的@MaxPower,拼写完全相同,没有空格问题或其他问题。@user3043636,没错,但必须匹配。例如,我不能使用foo bar baz 29。我要为Tab3更改什么值?哪列是Tab3?好的,假设Tab3是另一个数据帧,您可以在要合并的id上设置该df的索引(在本例中为ClientID),然后.MetricValue使用您需要其值的列。我有以下内容:df1['Metric']=df1.ClientID.map(df2.set_index('ClientID').Metric\u Value)。fillna(0)AttributeError:'DataFrame'对象没有属性'Metric\u Value',然后使用set\u索引('ClientID')['Metric Value']