gpt4 book ai didi

python-2.7 - 根据索引合并 Pandas 行(时间序列)

转载 作者:行者123 更新时间:2023-12-01 00:16:43 24 4
gpt4 key购买 nike

我用了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保持不变。如何将同一日期的行合并为一个日期?谢谢。

附加信息:我尝试使用 pd.concat()正如 Joris 所建议的(我必须传递 0 作为轴参数,因为 1 导致 ValueError:cannot reindex from a duplicate axis )而不是 .append()但由此产生的 DataFrame.append() 相同,一个非均匀非单调时间序列。我认为索引是问题所在,但我不确定我能做些什么来解决它,我认为一些时间戳可能包含小时信息而其他时间戳不包含所以我试过我也试过使用 .resample('D',how='mean')在每个 DataFrame使用前 .concat()但这并没有什么不同。

解决方案: Joris 的解决方案是正确的,我没有意识到 .resample()没有到位。一旦.resample()被分配给一个新的DataFrame Joris 的建议提供了预期的结果。

最佳答案

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 应该正常工作。

关于python-2.7 - 根据索引合并 Pandas 行(时间序列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23124220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com