Pandas使用不同索引拼接数据

5

我有三个数据框,想要将它们合并在一起,但是它们的索引都不同。这三个索引的长度相同。我的第一个数据框看起来像这样:

Index    Time_start    Time_end    duration    value
0        5             10          5           1.0
1        10            16          6           NaN
...
39       50            53          3           NaN

第二个数据框看起来像这样:

Index    Time_start    Time_end    duration    value
40        5             10         5           2.0
42        10            16         6           NaN
...
79        50            53         3           NaN

第三个看起来和第二个一模一样,但Index=[80..119]。但是time_start、time_end和duration完全相同,只有值不同。
我想要连接值列,使它看起来像这样。
Index    Time_start    Time_end    duration    value1    value2 value3
1        5             10          5           1.0       2      3
2        10            16          6           NaN       NaN    NaN
...
39       50            53          3           NaN       NaN    NaN

到目前为止,我尝试了这个。
pd.concat([df1, df2.value, ms3.value], axis=1, join_axes = [df1.index])

但是索引不同,所以它不能正常工作。我知道我可以首先尝试使用


df2.reset_index(drop=True)

然后进行连接,这样可以实现,但我相信有更好的方法。

2个回答

6
dfs = [df1, df2]
cols = ['Time_start', 'Time_end', 'duration']
keys = ['value1', 'value2']
pd.concat(
    [df.set_index(cols).value for df in dfs],
    axis=1, keys=keys)

                              value1  value2
Time_start Time_end duration                
5          10       5            1.0     2.0
10         16       6            NaN     NaN
50         53       3            NaN     NaN

4

使用:

dfs = [df1,df2]
k = ['value1','value2']
    df = pd.concat([x.set_index(['Time_start','Time_end','duration']) for x in dfs], 
                    axis=1,keys=k)
df.columns = df.columns.droplevel(-1)
print (df)
                              value1  value2
Time_start Time_end duration                
5          10       5            1.0     2.0
10         16       6            NaN     NaN
50         53       3            NaN     NaN

另一个解决方案:
dfs = [df1,df2]
df = pd.concat([x.set_index(['Time_start','Time_end','duration']) for x in dfs],axis=1)
df.columns = [x + str(i+1) for i, x in enumerate(df.columns)]
print (df)
                              value1  value2
Time_start Time_end duration                
5          10       5            1.0     2.0
10         16       6            NaN     NaN
50         53       3            NaN     NaN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接