如何将信息从一个数据帧映射到另一个具有非唯一索引的数据帧?

时间:2021-01-13 23:09:32

标签: pandas dataframe mapping multi-index

我正在尝试使用非唯一索引将信息从 df 映射到 df1。不确定这是否可以通过多索引处理?感谢您的帮助。

我有这个数据框 (df),我想从中映射信息:

将熊猫导入为 pd

df = pd.DataFrame({'Col_1':['c', 'a', 'c', 'b', 'a', 'a', 'b', 'c', 'a', 'c'], 
        'Col_2':['spam', 'spam', 'spam', 'spam', 'spam', 'egg', 'egg', 'egg', 'egg', 'egg'],
        'Col_3':[2, 1, 4, 1, 3, 5, 4, 6, 7, 7]}
            )

In [2]: df
Out[2]:

  Col_1 Col_2  Col_3
0     c  spam      2
1     a  spam      1
2     c  spam      4
3     b  spam      1
4     a  spam      3
5     a   egg      5
6     b   egg      4
7     c   egg      6
8     a   egg      7
9     c   egg      7

然后是我想要将信息映射到的第二个数据帧 (df1):

df1 = pd.DataFrame({'Col_1':['doe', 'fay', 'jane', 'jon', 'tom'], 
        'Col_2':['c', 'a', 'b', 'a', 'c'],
        'spam':['L', 'L', 'L', 'L', 'L'],
        'egg':['Z', 'Z', 'Z', 'Z', 'Z']}

  Col_1 Col_2 spam egg
0   doe     c    L   Z
1   fay     a    L   Z
2  jane     b    L   Z
3   jon     a    L   Z
4   tom     c    L   Z

我试图将 df 映射到 df1:

d=df.set_index('Col_1')['Col_3']
p='({})'.format('\\b|\\b'.join(df['Col_1']))
df1['Col_3']=df1['Col_1'].str.extract(p,expand=False).map(d)

但我收到错误消息:“重新索引仅对唯一值的索引对象有效。”我不知道如何重新索引才能达到我想要的结果。

我尝试向 df 和 df1 添加另一列名为“Unique”的列,但遇到另一个错误:“‘DataFrame’对象没有属性‘str’”

d=df.set_index(['Unique', 'Group'])['Date']
p='({})'.format('\\b|\\b'.join(df[['Group', 'Class']]))
df1['Date']=df1[['Group', 'Unique']].str.extract(p,expand=False).map(d)

如何实现以下数据框(df1_modified)?

df1_modified

   Col_1 Col_2 spam  spam_1 egg  egg_1
0   doe     c    L       2   Z      3
1   fay     a    L       1   Z      3
2  jane     b    L       1   Z      2
3   jon     a    L       1   Z      3
4   tom     c    L       2   Z      3
5   jer     b    L       1   Z      2

感谢您的帮助。

0 个答案:

没有答案