gpt4 book ai didi

python - 使用 Pandas 将多个数据帧合并到单个列上,同时保留 "on"列

转载 作者:行者123 更新时间:2023-12-01 06:59:26 26 4
gpt4 key购买 nike

我有几个采用以下格式的数据框:

time, 2019-01-25
07:00-07:30, 180.22
07:30-08:00, 119.12
08:00-08:30, 11.94
08:30-09:00, 41.62
09:00-09:30, 28.69
09:30-10:00, 119.77
...

(我有很多像上面这样的文件加载到名为 frames 的数据帧数组中)。

我正在使用Pandas将它们与代码合并:

df_merged = reduce(lambda left, right: pd.merge(left, right, on=['time'],
how='outer'), frames).fillna('0.0').set_index('time')

(代码最初来自 here )

合并在技术上是有效的,但是,最终合并的数据帧省略了时间列。 有谁知道如何执行上述合并,同时仍保留 df_merged 中的 time 列?

最佳答案

我会考虑使用 join在这种情况下,而不是 merge

设置:

df1 = pd.DataFrame({'A':[*'ABCDE'], 'B':np.random.randint(0,10,5)})
df2 = pd.DataFrame({'A':[*'ABCDE'], 'C':np.random.randint(0,100,5)})
df3 = pd.DataFrame({'A':[*'ABCDE'], 'D':np.random.randint(0,1000,5)})
df4 = pd.DataFrame({'A':[*'ABCDE'], 'E':np.random.randint(0,10000,5)})


result1 = reduce(lambda l,r: pd.merge(l,r), [df1,df2,df3,df4])
result2 = df1.set_index('A').join([d.set_index('A') for d in [df2,df3,df4]]).reset_index()


all(result1 == result2)

True

输出(结果1):

   A  B   C    D     E
0 A 7 19 980 8635
1 B 7 44 528 431
2 C 5 4 572 9405
3 D 7 7 96 2596
4 E 1 6 514 940

时间安排:

%%timeit
result1 = reduce(lambda l,r: pd.merge(l,r), [df1,df2,df3,df4])

9.37 ms ± 325 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%%timeit
result2 = df1.set_index('A').join([d.set_index('A') for d in [df2,df3,df4]]).reset_index()

4.04 ms ± 79 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

关于python - 使用 Pandas 将多个数据帧合并到单个列上,同时保留 "on"列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699583/

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