Python 添加来自不同数据帧的值

Python 添加来自不同数据帧的值,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我想为每个a组创建一个新列df1[“C”],使用B值 输出应为: df1: A B 0 2002-01-13 3.9 1 2002-01-13 1.9 2 2002-01-14 8.0 3 2002-01-14 9.0 df2: A D 0 2002-01-13 Joseph 1 2002-01-13 Emma 2 2002-01-13 Michael 3 2002-01-14 A

我想为每个
a
组创建一个新列
df1[“C”]
,使用
B

输出应为:

df1:
            A    B
0  2002-01-13  3.9
1  2002-01-13  1.9
2  2002-01-14  8.0
3  2002-01-14  9.0
df2:
            A        D
0  2002-01-13   Joseph
1  2002-01-13     Emma
2  2002-01-13  Michael
3  2002-01-14     Anna
4  2002-01-14   Yvonne
5  2002-01-14  Anthony
现在我想把
C
值分配给每个
A
组,分配给另一个
df2

            A    B     C
0  2002-01-13  3.9   2.9
1  2002-01-13  1.9   2.9
2  2002-01-14  8.0   8.5
3  2002-01-14  9.0   8.5
输出应为:

df1:
            A    B
0  2002-01-13  3.9
1  2002-01-13  1.9
2  2002-01-14  8.0
3  2002-01-14  9.0
df2:
            A        D
0  2002-01-13   Joseph
1  2002-01-13     Emma
2  2002-01-13  Michael
3  2002-01-14     Anna
4  2002-01-14   Yvonne
5  2002-01-14  Anthony
我试过:

            A        D     E
0  2002-01-13   Joseph   2.9
1  2002-01-13     Emma   2.9
2  2002-01-13  Michael   2.9
3  2002-01-14     Anna   8.5
4  2002-01-14   Yvonne   8.5
5  2002-01-14  Anthony   8.5

第1部分

df1["C"] = df1.groupby("A")["B"].mean()
代码不起作用的原因是
groupby
对象返回一个由
a
索引的序列

第1部分和第2部分

您可以通过将
A
映射到每个数据帧中预先计算的
groupby
对象来执行转换

df['C'] = df.groupby('A')['B'].transform('mean')

第一个问题
transform

s = df1.groupby('A')['B'].mean()

df['C'] = df['A'].map(s)
df2['E'] = df2['A'].map(s)
第二次使用
map
(注意,我使用的是df1,这直接导致我添加了
drop\u重复项


您不必向df1添加列,您可以直接将值从groupby df1映射到df2

df2['E']=df2.A.map(df1.drop_duplicates('A').set_index('A').C)
你可以用

df2['E'] = df2['A'].map(df1.groupby('A').B.mean())


    A           D       E
0   2002-01-13  Joseph  2.9
1   2002-01-13  Emma    2.9
2   2002-01-13  Michael 2.9
3   2002-01-14  Anna    8.5
4   2002-01-14  Yvonne  8.5
5   2002-01-14  Anthony 8.5
因为其他人没有提到使用
pd.merge
DataFrame.join
,所以发布

如果只需要最终输出:

df['C'] = df['A'].replace(df.groupby('A')['B'].mean().to_dict())

我有一种预感,在给定大数据帧的情况下,基于连接的解决方案将比基于地图的解决方案更快。

我会使用
assign
,但这是我的答案。@piRSquared,需要开始使用assign:)这与答案基本相同,但使用
replace
。我认为您应该使用
map
来代替。在我起草答案时,还发布了另外三个答案:)。我同意
transform
map
都比我的好。我认为df2.A.map(df1.set_index('A')['C'].to_dict())会更干净,你不需要删除副本,因为字典会处理它+1@Vaishali这是真的:-)