基于另一个数据帧列值将数据帧列和行合并到特定索引

2024-03-29 11:09:13 发布

您现在位置:Python中文网/ 问答频道 /正文

抱歉,如果标题不够清晰,我会用例子更好地解释自己:

dataframe1 = pd.DataFrame(columns=['UniqueNum', 'B' ,'A'])
dataframe1['UniqueNum'] = ['1a','2b', '3c']
dataframe1['A'] = ['2','6', '7']
dataframe1['B'] = ['3','88', '23']
print dataframe1
dataframe2 = pd.DataFrame(columns=['TestId', 'C' ,'D'])
dataframe2['TestId'] = ['1a','2b', '3c', '1a', '3c', '2b']
dataframe2['C'] = ['22','46', '47','22','46', '47']
dataframe2['D'] = ['13','88', '233','22','46', '47']
print dataframe2

打印内容包括:

>>> 
  UniqueNum   B  A
0        1a   3  2
1        2b  88  6
2        3c  23  7
  TestId   C    D
0     1a  22   13
1     2b  46   88
2     3c  47  233
3     1a  22   22
4     3c  46   46
5     2b  47   47
>>> 

我想合并输出数据帧,使其看起来像:

      TestId   C    D   B  A
0     1a       22   13   3  2
1     2b       46   88  88  6
2     3c       47  233  23  7
3     1a       22   22   3  2
4     3c       46   46  23  7
5     2b       47   47  88  6

这意味着要向dataframe2添加值与dataframe1中的UniqueNum与dataframe2中的TestId之间的匹配对应的列。 谢谢


Tags: columns数据标题内容dataframe例子pdprint
1条回答
网友
1楼 · 发布于 2024-03-29 11:09:13

可以将^{}与left join和rename列一起使用:

d = {'UniqueNum':'TestId'}
df = dataframe2.merge(dataframe1.rename(columns=d), how='left', on='TestId')

或者创建索引而不是rename,并更改left_onright_index的参数:

df = dataframe2.merge(dataframe1.set_index('UniqueNum'), 
                      how='left', 
                      left_on='TestId', 
                      right_index=True)

或同时指定了列和最后一个removeUniqueNum列:

df = dataframe2.merge(dataframe1, 
                      how='left', 
                      left_on='TestId', 
                      right_on='UniqueNum').drop('UniqueNum', axis=1)

print (df)

  TestId   C    D   B  A
0     1a  22   13   3  2
1     2b  46   88  88  6
2     3c  47  233  23  7
3     1a  22   22   3  2
4     3c  46   46  23  7
5     2b  47   47  88  6

相关问题 更多 >