gpt4 book ai didi

python - 扩大 Pandas 数据框,类似于 Pivot 或 Stack/Unstack

转载 作者:行者123 更新时间:2023-11-30 23:26:58 24 4
gpt4 key购买 nike

我的问题可能最好用一个例子来解释:

我有:

ID0,ID1,Time,Data0,Data1
1 1 10 'A' 93
1 2 10 'A' 55
1 1 12 'A' 88
1 2 12 'B' 66
2 3 102 'C' 14
2 4 102 'A' 22
2 4 112 'D' 15
2 3 112 'B' 43

我想要什么:

ID0,ID1,Time,Data0,Data1,Data0.2,Data1.2
1 1 10 'A' 93 'A' 55
1 2 10 'A' 55 'A' 93
1 1 12 'A' 88 'B' 66
1 2 12 'B' 66 'A' 88
2 3 102 'C' 14 'A' 22
2 4 102 'A' 22 'C' 14
2 4 112 'D' 15 'B' 43
2 3 112 'B' 43 'D' 15

本质上,每个 ID0 都有 2 个唯一的 ID1。

定期对数据进行采样。

我想通过添加更多列来使原始数据框“更宽”,以便每行包含来自同一时间段的另一个 ID1 的信息。

最佳答案

尝试:

grb = df.groupby(['ID0', 'Time'])
df['Data0.2'] = grb['Data0'].transform(lambda ts: ts[::-1])
df['Data1.2'] = grb['Data1'].transform(lambda ts: ts[::-1])

根据您的陈述,这基本上是在做什么

there are 2 unique ID1s associated with every ID0.

它按['ID0', 'Time']对数据帧进行分组并反转特定列;如果每个组中恰好有 2 个唯一的 ID1,则数据框将按其他 ID1 的值进行扩展;

>>> df
ID0 ID1 Time Data0 Data1 Data0.2 Data1.2
0 1 1 10 'A' 93 'A' 55
1 1 2 10 'A' 55 'A' 93
2 1 1 12 'A' 88 'B' 66
3 1 2 12 'B' 66 'A' 88
4 2 3 102 'C' 14 'A' 22
5 2 4 102 'A' 22 'C' 14
6 2 4 112 'D' 15 'B' 43
7 2 3 112 'B' 43 'D' 15

[8 rows x 7 columns]

最终编辑:要将两列一起进行,您可以尝试以下操作;请注意,这里需要 .values:

>>> grb = df.groupby(['ID0', 'Time'])
>>> df2 = grb['Data0', 'Data1'].transform(lambda obj: obj.values[::-1])
>>> df.join(df2, rsuffix='.2')

关于python - 扩大 Pandas 数据框,类似于 Pivot 或 Stack/Unstack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22298542/

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