Python 熊猫:如何合并不同的数据帧?

Python 熊猫:如何合并不同的数据帧?,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,我有两个数据帧df1和df2 第一个数据框包含人名: df1 NAME 0 Paul 1 Jack 2 Anna 3 Tom 4 Eva 以及第二个姓名,其中包含每个人收到和支付的金额信息。有些人不在df1中,例如Zack。有些人无法出现在列表中,例如Tom df2 Receiver Payer Amount 0 Paul Jack 300 1 Anna Paul 600 2 Anna Eva 10

我有两个数据帧
df1
df2

第一个数据框包含人名:

df1  NAME
0    Paul
1    Jack
2    Anna
3    Tom
4    Eva
以及第二个姓名,其中包含每个人收到和支付的金额信息。有些人不在
df1
中,例如
Zack
。有些人无法出现在列表中,例如
Tom

df2  Receiver Payer Amount  
0     Paul    Jack   300 
1     Anna    Paul   600
2     Anna    Eva    100
3     Eva     Zack   400
我想创建一个包含每个人收到和支付的所有金额的数据框。因此:

df3  NAME   RECEIVED  PAYED
0    Paul     300      600
1    Jack      0       300
2    Anna     700       0
3    Tom      NaN      NaN
4    Eva      400      100  
使用:

说明

print (df2.melt('Amount', value_name='NAME', var_name='type'))

   Amount      type  NAME
0     300  Receiver  Paul
1     600  Receiver  Anna
2     100  Receiver  Anna
3     400  Receiver   Eva
4     300     Payer  Jack
5     600     Payer  Paul
6     100     Payer   Eva
7     400     Payer  Zack
  • 首先通过以下方式重塑数据帧:
  • 每个
    NAME
    type
  • 按第二级
    MultiIndex
  • 从左到右的最后一个
    DataFrame

  • 另一个解决方案包括:

    最后一列(如有必要)
    重命名
    列:

    df3 = df3.rename(columns={'Receiver':'RECEIVED','Payer':'PAYED'})
    print (df3)
       NAME  PAYED  RECEIVED
    0  Paul  600.0     300.0
    1  Jack  300.0       0.0
    2  Anna    0.0     700.0
    3   Tom    NaN       NaN
    4   Eva  100.0     400.0
    
    详细信息

    print (df2.melt('Amount', value_name='NAME', var_name='type'))
    
       Amount      type  NAME
    0     300  Receiver  Paul
    1     600  Receiver  Anna
    2     100  Receiver  Anna
    3     400  Receiver   Eva
    4     300     Payer  Jack
    5     600     Payer  Paul
    6     100     Payer   Eva
    7     400     Payer  Zack
    

    我收到一个错误
    'DataFrame'对象没有属性'melt'
    @emax-这是版本问题,请将
    df2.melt('Amount',value\u name='name',var\u name='type')
    更改为
    pd.melt(df2,'Amount',value\u name='name',var\u name='type')
    @jazreal很棒,谢谢。我收到了与的
    组\u相同的错误。我应该用同样的方法解决这个问题吗?@emax-你认为
    groupby
    ?相反,
    group\u by
    ,似乎是打字错误。@jazreal是的,是打字错误,对不起。但是在
    groupby
    行中,我有一个错误:
    TypeError:unhabable type:list
    print (df2.melt('Amount', value_name='NAME', var_name='type'))
    
       Amount      type  NAME
    0     300  Receiver  Paul
    1     600  Receiver  Anna
    2     100  Receiver  Anna
    3     400  Receiver   Eva
    4     300     Payer  Jack
    5     600     Payer  Paul
    6     100     Payer   Eva
    7     400     Payer  Zack