我有一个 DataFrame df1(索引为日期时间)并且df2有很多列,不同长度的索引。
我需要结合df1使用df2,以替代指标df2。结果出现了df3。
df1
T1
2011-09-01 00:00:00 10
2011-09-01 00:10:00 20
2011-09-01 00:20:00 30
2011-09-01 00:30:00 40
df2
T2 T3
0 1.1 2.0
1 1.2 3.0
2 1.3 4.0
df3
T1 T2 T3
2011-09-01 00:00:00 10 1.1 2.0
2011-09-01 00:10:00 20 1.2 3.0
2011-09-01 00:20:00 30 1.3 4.0
2011-09-01 00:30:00 40 Nan Nan
Run Code Online (Sandbox Code Playgroud)
我想尝试,concat, join, merge, append但这些似乎不合适。
使用set_index导致出现错误:长度不匹配。
我最终尝试这样做:
df3=pd.DataFrame(df2,index=df1.index,copy=True)
Run Code Online (Sandbox Code Playgroud)
我得到了所需的索引和列,df2但它们是空的。
这是一种方法:
In [32]: from pandas import DataFrame, date_range, concat
In [33]: from numpy.random import randn
In [34]: df = DataFrame(randn(5, 1), index=date_range('20010101', periods=5), columns=['A'])
In [35]: df2 = DataFrame(randn(3, 2), columns=list('BC'))
In [36]: concat([df, df2.set_index(df.index[:len(df2)])], axis=1)
Out[36]:
A B C
2001-01-01 -0.043 0.759 -0.125
2001-01-02 -1.377 0.895 0.629
2001-01-03 0.263 -0.007 -0.515
2001-01-04 1.546 NaN NaN
2001-01-05 -0.657 NaN NaN
Run Code Online (Sandbox Code Playgroud)
您也可以使用DataFrame.join()稍短的代码执行此操作:
In [7]: df.join(df2.set_index(df.index[:len(df2)]))
Out[7]:
A B C
2001-01-01 -0.607 -0.038 0.593
2001-01-02 0.573 0.399 -0.627
2001-01-03 0.319 0.312 -0.152
2001-01-04 -1.671 NaN NaN
2001-01-05 -1.589 NaN NaN
Run Code Online (Sandbox Code Playgroud)