gpt4 book ai didi

python - 将 Pandas 数据框行拆分为多行

转载 作者:行者123 更新时间:2023-12-01 23:03:01 25 4
gpt4 key购买 nike

我有一个 pandas 时间序列,例如:

df = pd.DataFrame(
{
"IDs": [
["A", "B"],
["A", "B", "A", "C"],
["A", "B", "A", "D", "C", "D"],
],
"distance": [[1], [1.1, 2.8], [1, 3, 0.5]],
},
index=[
pd.to_datetime("2022-01-01 12:00:00"),
pd.to_datetime("2022-01-01 12:00:01"),
pd.to_datetime("2022-01-01 12:00:02"),
],
)

这会产生:

                     IDs    distance
2022-01-01 12:00:00 [A, B] [1]
2022-01-01 12:00:01 [A, B, A, C] [1.1, 2.8]
2022-01-01 12:00:02 [A, B, A, D, C, D] [1, 3, 0.5]

我想拆分行,以便每一行只包含到一对的距离,例如:


IDs distance
2022-01-01 12:00:00 [A, B] 1.0
2022-01-01 12:00:01 [A, B] 1.1
2022-01-01 12:00:01 [A, C] 2.8
2022-01-01 12:00:02 [A, B] 1.0
2022-01-01 12:00:02 [A, D] 3.0
2022-01-01 12:00:02 [C, D] 0.5

执行此操作的最佳方法是什么?

作为引用,每一行 IDs 行始终是 2n 个元素的列表,其中 n 是相应 distance 行中的元素数。

最佳答案

IIUC,使用列表推导将 ID 按 2 为一组进行分组,然后是 explode两个 ID/距离列:

df['IDs'] = [[l[i:i+2] for i in range(0,len(l),2)] for l in df['IDs']]
df = df.explode(['IDs', 'distance'])

注意。这要求每行的 len(IDs) 是 len(distance) 的 2 倍!

输出:

                        IDs distance
2022-01-01 12:00:00 [A, B] 1
2022-01-01 12:00:01 [A, B] 1.1
2022-01-01 12:00:01 [A, C] 2.8
2022-01-01 12:00:02 [A, B] 1
2022-01-01 12:00:02 [A, D] 3
2022-01-01 12:00:02 [C, D] 0.5

关于python - 将 Pandas 数据框行拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71513825/

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