pandas中的多个文件组合

时间:2018-01-09 13:08:28

标签: python pandas

假设file1为:

     State        Date      
0    NSW        01/02/16
1    NSW        01/03/16
3    VIC        01/04/16
...
100 TAS          01/12/17

文件2是:

    State      01/02/16  01/03/16  01/04/16  ....   01/12/17
0     VIC        10000      12000     14000  ....      17600
1     NSW        50000
....

现在我想基于Date加入这两个文件 换句话说,我想将file1的Date列与file2列的'date。

组合在一起

2 个答案:

答案 0 :(得分:3)

我认为您需要melt merge,参数on可能会省略DataFrame s中所有列的合并:

df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)

df = df2.melt('State', var_name='Date', value_name='col').merge(df1, how='right')
print (df)
  State      Date      col
0   NSW  01/02/16  50000.0
1   NSW  01/03/16      NaN
2   VIC  01/04/16  14000.0
3   TAS  01/12/17      NaN

left加入的解决方案:

df = df1.merge(df2.melt('State', var_name='Date', value_name='col'), how='left')
print (df)
  State      Date      col
0   NSW  01/02/16  50000.0
1   NSW  01/03/16      NaN
2   VIC  01/04/16  14000.0
3   TAS  01/12/17      NaN

答案 1 :(得分:0)

您可以melt将第二个数据框格式化为长格式,然后使用第一个数据框merge来获取值。

import pandas as pd

df1 = pd.DataFrame({'State': ['NSW','NSW','VIC'], 
                    'Date': ['01/02/16', '01/03/16', '01/04/16']})
df2 = pd.DataFrame([['VIC',10000,12000,14000], 
                    ['NSW',50000,60000,62000]], 
                    columns=['State', '01/02/16', '01/03/16', '01/04/16'])

df1.merge(pd.melt(df2, id_vars=['State'], var_name='Date'), on=['State', 'Date'])
# returns:
       Date State  value
0  01/02/16   NSW  50000
1  01/03/16   NSW  60000
2  01/04/16   VIC  14000