Python 动态groupby时将数据帧与另一个数据帧合并
我有一个数据帧(df1),其中的一列对应于从另一个数据帧(df0)中融化。因此,在df1中,我有一个“特征”列,可以是df0中的“材料”、“客户”等,然后在df1中有一个“值”列,它将是df0中相应“特征”列中相同的值。例如,在df1中,我有df1.feature='Material'和df1.value='Car'。在df0中,我将有一列df1.Material,其中包含一个名为“Car”的值 我需要从df0中获得df1中每个值的总“收入”。我的问题是,我不能使用合并,因为df1.feature在df0中不是作为一列出现的,而是df0.Material、df0.Customer等。我可以透视df1,使df1.feature成为多个列,然后为df0创建一些groupby并将它们合并到df1,但这似乎效率很低 我是否可以创建一个函数或类似函数,其中df1根据df1.feature和df1.value中的列名和值获取df0的分组值Python 动态groupby时将数据帧与另一个数据帧合并,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个数据帧(df1),其中的一列对应于从另一个数据帧(df0)中融化。因此,在df1中,我有一个“特征”列,可以是df0中的“材料”、“客户”等,然后在df1中有一个“值”列,它将是df0中相应“特征”列中相同的值。例如,在df1中,我有df1.feature='Material'和df1.value='Car'。在df0中,我将有一列df1.Material,其中包含一个名为“Car”的值 我需要从df0中获得df1中每个值的总“收入”。我的问题是,我不能使用合并,因为df1.featur
df0 = pd.DataFrame({'feature': ['Material', 'Material', 'Customer'],
'value': ['Car', 'Bike', 'Trump'],
'Coefficient1': [1, 2, 3],
'Coefficient2': [5,6,7]})
df1 = pd.DataFrame({'Material': ['Car', 'Car','Watch'],
'Customer': ['Clinton', 'Obama', 'Trump'],
'Revenue': [100, 200, 300],
'Margin': [10, 20, 3]})
df0
df1
我希望在df0中有:
feature value coefficient1 coefficient2 Revenue Margin
Material Car 1 5 300 15
Material Bike 2 6 NaN NaN
Customer Trump 3 7 300 3
以下是一种方法,包括:
其中,
print(m)
的结果为:
feature value Revenue Margin
0 Customer Clinton 100 10
1 Customer Obama 200 20
2 Customer Trump 300 3
3 Material Car 300 15
4 Material Watch 300 3
以下是一种方法,包括:
其中,
print(m)
的结果为:
feature value Revenue Margin
0 Customer Clinton 100 10
1 Customer Obama 200 20
2 Customer Trump 300 3
3 Material Car 300 15
4 Material Watch 300 3
添加一些示例数据和基于该示例数据的预期输出。如果我们可以直观地看到您想要做什么,然后通读大量文本,那么就更容易理解您的问题。我已经更新了数据帧和输出-希望有帮助:-)您是如何在第一行的预期输出中获得
300
atRevenue
和15
atMargin
的值的?这是总和
和平均值
?它背后的逻辑是什么。添加一些示例数据和基于该示例数据的预期输出。如果我们可以直观地看到您想要做什么,然后通读大量文本,那么就更容易理解您的问题。我已经更新了数据帧和输出-希望有帮助:-)您是如何在第一行的预期输出中获得300
atRevenue
和15
atMargin
的值的?这是总和
和平均值
?背后的逻辑是什么。
m=(df1.melt(['Revenue','Margin'],var_name='feature')
.groupby(['feature','value'],as_index=False).agg({'Revenue':'sum','Margin':'mean'}))
final=df0.merge(m,on=['feature','value'],how='left')
feature value Coefficient1 Coefficient2 Revenue Margin
0 Material Car 1 5 300.0 15.0
1 Material Bike 2 6 NaN NaN
2 Customer Trump 3 7 300.0 3.0
feature value Revenue Margin
0 Customer Clinton 100 10
1 Customer Obama 200 20
2 Customer Trump 300 3
3 Material Car 300 15
4 Material Watch 300 3