我使用Pandas
.append()
按照索引(日期)添加来自多个Pandas
timeseries
的列。但是,不是将公共日期的所有数据合并为一行,而是数据如下:
sve2_all.sort(inplace=True)
print sve2_all['20000101':'20000104']
Hgtot ng/l Q l/s DOC_mg/L Flow_mm/day MeHg ng/l Site \
2000-01-01 NaN NaN NaN 0.18 NaN NaN
2000-01-01 NaN 0.613234 NaN NaN NaN SVE
2000-01-02 NaN NaN NaN 0.18 NaN NaN
2000-01-02 NaN 0.614410 NaN NaN NaN SVE
2000-01-03 NaN NaN NaN NaN NaN 2
2000-01-03 NaN 0.617371 NaN NaN NaN SVE
2000-01-03 NaN NaN NaN NaN NaN NaN
2000-01-03 NaN NaN NaN 0.18 NaN NaN
2000-01-04 NaN 0.627733 NaN NaN NaN SVE
2000-01-04 NaN NaN NaN 0.18 NaN NaN
TOC_filt.TOC TOC_unfilt.TOC Temp oC pH
2000-01-01 NaN NaN NaN NaN
2000-01-01 NaN NaN -12.6117 NaN
2000-01-02 NaN NaN NaN NaN
2000-01-02 NaN NaN -2.3901 NaN
2000-01-03 NaN 8.224648 NaN NaN
2000-01-03 NaN NaN -5.0064 NaN
2000-01-03 NaN NaN NaN NaN
2000-01-03 NaN NaN NaN NaN
2000-01-04 NaN NaN -1.5868 NaN
2000-01-04 NaN NaN NaN NaN
[10 rows x 10 columns]
我尝试使用以下方式重新取样这些数据:
sve2_all.resample('D', how='mean')
并且还使用以下方式分组:
sve2_all.groupby(sve2_all.index.map(lambda t: t.day))
但是,DataFrame
保持不变。如何将同一日期的行折叠为一个日期?感谢。
其他信息:我尝试使用Joris建议的pd.concat()
(我必须传递0作为轴参数,因为1导致ValueError:cannot reindex from a duplicate axis
)而不是{{1但是得到的.append()
与DataFrame
相同,这是一个非均匀的非单调时间序列。我认为索引是问题,但我不知道我能做些什么来解决它,我认为一些时间戳可能包含小时信息,而其他时间戳不包含我尝试过我也试过使用{{1在使用.append()
之前,在每个.resample('D',how='mean')
上,但它并没有产生任何影响。
解决方案: Joris解决方案是正确的,我没有意识到DataFrame
没有到位。将.concat()
分配给新的.resample()
Joris'建议提供了理想的结果。
答案 0 :(得分:4)
append
方法会附加'行到另一个数据帧,并且不会根据索引标签与它合并。为此,您可以使用concat
使用玩具示例:
In [14]: df1 = pd.DataFrame(np.random.randn(3,2), columns=list('AB'), index=pd.date_range('2000-01-01', periods=3))
In [15]: df1
Out[15]:
A B
2000-01-01 1.532085 -1.338895
2000-01-02 -0.016784 -0.270698
2000-01-03 -1.680379 0.838287
In [16]: df2 = pd.DataFrame(np.random.randn(3,2), columns=list('CD'), index=pd.date_range('2000-01-01', periods=3))
In [17]: df2
Out[17]:
C D
2000-01-01 0.375214 -0.812558
2000-01-02 -1.099848 -0.889941
2000-01-03 1.556383 0.870608
.append
将追加行(df2
中不在df1
的列将添加,这就是这种情况):
In [18]: df1.append(df2)
Out[18]:
A B C D
2000-01-01 1.532085 -1.338895 NaN NaN
2000-01-02 -0.016784 -0.270698 NaN NaN
2000-01-03 -1.680379 0.838287 NaN NaN
2000-01-01 NaN NaN 0.375214 -0.812558
2000-01-02 NaN NaN -1.099848 -0.889941
2000-01-03 NaN NaN 1.556383 0.870608
pd.concat()
将两个数据帧连接在一个索引轴上:
In [19]: pd.concat([df1, df2], axis=1)
Out[19]:
A B C D
2000-01-01 1.532085 -1.338895 0.375214 -0.812558
2000-01-02 -0.016784 -0.270698 -1.099848 -0.889941
2000-01-03 -1.680379 0.838287 1.556383 0.870608
除此之外,resample
通常应该有效。