Python pandas.concat仅使用一个表中的索引
我正在寻找一种更有效的方法来连接两个具有Python pandas.concat仅使用一个表中的索引,python,pandas,dataframe,Python,Pandas,Dataframe,我正在寻找一种更有效的方法来连接两个具有DatetimeIndex的数据帧。考虑到我只需要第一个的日期,第二个的所有数据: from io import StringIO import pandas as pd a = StringIO(''' Time,No,Value 2017-10-17 04:00:00,1,10 2017-10-17 04:01:00,2,10 2017-10-17 04:02:00,3,10 2017-10-17 04:03:00,4,10 2017-10-17 0
DatetimeIndex
的数据帧。考虑到我只需要第一个的日期,第二个的所有数据:
from io import StringIO
import pandas as pd
a = StringIO('''
Time,No,Value
2017-10-17 04:00:00,1,10
2017-10-17 04:01:00,2,10
2017-10-17 04:02:00,3,10
2017-10-17 04:03:00,4,10
2017-10-17 04:04:00,5,10
''')
b = StringIO('''
Time,Str
2017-10-17 04:00:00,a
2017-10-17 04:02:00,b
''')
df1 = pd.read_csv(a).set_index('Time')
df2 = pd.read_csv(b).set_index('Time')
我现在做的是包括一个无用的列,然后删除它:
>>> df = pd.concat([df1.No, df2], axis=1)
>>> print(df)
No Str
Time
2017-10-17 04:00:00 1 a
2017-10-17 04:01:00 2 NaN
2017-10-17 04:02:00 3 b
2017-10-17 04:03:00 4 NaN
2017-10-17 04:04:00 5 NaN
>>> del df['No']
>>> print(df)
Str
Time
2017-10-17 04:00:00 a
2017-10-17 04:01:00 NaN
2017-10-17 04:02:00 b
2017-10-17 04:03:00 NaN
2017-10-17 04:04:00 NaN
预期命令(此命令无效):
>>> pd.concat([df1.index, df2], axis=1)
Str
Time
2017-10-17 04:00:00 a
2017-10-17 04:01:00 NaN
2017-10-17 04:02:00 b
2017-10-17 04:03:00 NaN
2017-10-17 04:04:00 NaN
这是您想要的更简单的形式:
df2.reindex(df1.index)
按照第一个答案中的建议重新编制索引,或者:
pd.concat([df1.No, df2], axis=1)['Str']
您可以使用,默认情况下,它将索引上的两个数据帧连接在一起:
In [180]: df2.join(df1, how='outer')['Str']
Out[180]:
Time
2017-10-17 04:00:00 a
2017-10-17 04:01:00 NaN
2017-10-17 04:02:00 b
2017-10-17 04:03:00 NaN
2017-10-17 04:04:00 NaN
Name: Str, dtype: object