gpt4 book ai didi

python - Pandas :合并两个索引列

转载 作者:行者123 更新时间:2023-11-28 20:14:28 26 4
gpt4 key购买 nike

我有以下 Pandas 系列:

data = {(pd.Timestamp('2016-01-01 00:00:00'), datetime.time(0, 0)): 6.885,
(pd.Timestamp('2016-01-01 00:00:00'), datetime.time(0, 5)): 6.363,
(pd.Timestamp('2016-01-01 00:00:00'), datetime.time(0, 10)): 6.093,
(pd.Timestamp('2016-01-01 00:00:00'), datetime.time(0, 15)): 6.768,
(pd.Timestamp('2016-01-01 00:00:00'), datetime.time(0, 20)): 7.11}
s = pd.Series(data)

2016-01-01 00:00:00 6.885
00:05:00 6.363
00:10:00 6.093
00:15:00 6.768
00:20:00 7.110
dtype: float64

我怎样才能组合这两个索引列来创建一个 DatetimeIndex,如下所示:

2016-01-01 00:00:00    6.885
2016-01-01 00:05:00 6.363
2016-01-01 00:10:00 6.093
2016-01-01 00:15:00 6.768
2016-01-01 00:20:00 7.110
dtype: float64

最佳答案

直观的答案
使用 pd.Index.mappd.Timedelta

s.index = s.index.map(lambda t: t[0] + pd.Timedelta(str(t[1])))
s

2016-01-01 00:00:00 6.885
2016-01-01 00:05:00 6.363
2016-01-01 00:10:00 6.093
2016-01-01 00:15:00 6.768
2016-01-01 00:20:00 7.110
dtype: float64

快速回答
如果速度是你的追求,试试这个

t = np.array(
[t.hour * 60 + t.minute for t in s.index.get_level_values(1)],
'timedelta64[m]'
)

s.index = s.index.get_level_values(0) + t

2016-01-01 00:00:00 6.885
2016-01-01 00:05:00 6.363
2016-01-01 00:10:00 6.093
2016-01-01 00:15:00 6.768
2016-01-01 00:20:00 7.110
dtype: float64

时间测试

请注意,这在您关心优化的情况下。否则,请使用您认为正确的选择。

jez = lambda s: s.index.get_level_values(0) + pd.to_timedelta(s.index.get_level_values(1).astype(str))
pir1 = lambda s: s.index.map(lambda t: t[0] + pd.Timedelta(str(t[1])))
pir2 = lambda s: s.index.get_level_values(0) + np.array([t.hour * 60 + t.minute for t in s.index.get_level_values(1)], 'timedelta64[m]')

res = pd.DataFrame(
np.nan, [10, 30, 100, 300, 1000, 3000, 10000, 30000],
'jez pir1 pir2'.split()
)

for i in res.index:
s_ = pd.concat([s] * i)
for j in res.columns:
stmt = f'{j}(s_)'
setp = f'from __main__ import {j}, s_'
res.at[i, j] = timeit(stmt, setp, number=100)

res.plot(loglog=True)

enter image description here

res.div(res.min(1), 0)

jez pir1 pir2
10 2.400808 3.530032 1.0
30 4.045287 8.378484 1.0
100 6.337601 18.610263 1.0
300 8.664829 30.363422 1.0
1000 11.593935 44.210358 1.0
3000 11.899037 47.425953 1.0
10000 12.226166 49.546467 1.0
30000 12.543602 50.730653 1.0

关于python - Pandas :合并两个索引列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49217747/

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