大Pandas的绘图

2024-04-20 09:59:49 发布

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

我想在一个公共列上映射两个数据帧。
比如说

我的第一个数据帧:

>>> df
   Task  Emp
0  1     aa
1  1     bb
2  2     cc

我的第二个数据帧:

>>> df1
   Task  Days
0  1      12
1  2      23

我的要求是:

>>> Result
   Emp  Days
0  aa   12
1  bb   12
2  cc   23

无法对中的数据帧进行映射。什么是最好的方式来这样做,为巨大的无记录。你知道吗


Tags: 数据dftask方式记录resultdaysaa
3条回答

尝试:

pd.concat([d.set_index('Task') for d in [df, df1]], axis=1).reset_index(drop=True)

enter image description here

正如@Borja所指出的

@piRSquared By the way, your approach using concat will fail when you have duplicate values. For instance: df: Task Emp 5 cc 4 cc 8 cc 3 aa 2 aa 6 aa 4 bb 6 cc df1: Task Day 1 5 7 3 0 6 6 7 8 1 9 7 5 9 9 3 3 8

这不应该是答案。他说

我想你要找的是合并:

pd.merge(df, df1, on='Task')

输出:

    Emp Days
0   aa  12
1   bb  12
2   cc  23

如果您的数据帧很大(特别是如果两个数据帧中都有重复的'Task'值),您将遇到内存问题。这不是特定于merge函数的,而是因为它将把“Emp”和“Days”的值连接到“Task”的每个公共值上。他说

使用^{}

df.rename(columns={'Task':'Days'}, inplace=True)
df['Days'] = df['Days'].map(df1.set_index('Task')['Days'])
df = df[['Emp','Days']]
print (df)
  Emp  Days
0  aa    12
1  bb    12
2  cc    23

相关问题 更多 >