Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 动态groupby时将数据帧与另一个数据帧合并_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python 动态groupby时将数据帧与另一个数据帧合并

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

我有一个数据帧(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的分组值

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
at
Revenue
15
at
Margin
的值的?这是
总和
平均值
?它背后的逻辑是什么。添加一些示例数据和基于该示例数据的预期输出。如果我们可以直观地看到您想要做什么,然后通读大量文本,那么就更容易理解您的问题。我已经更新了数据帧和输出-希望有帮助:-)您是如何在第一行的预期输出中获得
300
at
Revenue
15
at
Margin
的值的?这是
总和
平均值
?背后的逻辑是什么。
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