gpt4 book ai didi

python - 如何最好地使用 pandas.DataFrame.pivot?

转载 作者:太空狗 更新时间:2023-10-30 02:56:43 25 4
gpt4 key购买 nike

我正在尝试将数据帧从键行、值行转换为以键作为列、以值作为单元格的表。例如:

带键、值的输入数据框:

>>>df = pd.DataFrame([['TIME', 'VAL1', 'VAL2', 'VAL3', 
'TIME', 'VAL1', 'VAL2', 'VAL3'],
["00:00:01",1,2,3,"00:00:02", 1,2,3]]).T

0 1
0 TIME 00:00:01
1 VAL1 1
2 VAL2 2
3 VAL3 3
4 TIME 00:00:02
5 VAL1 1
6 VAL2 2
7 VAL3 3

我希望它看起来像:

TIME      VAL1 VAL2 VAL3
00:00:01 1 2 3
00:00:02 1 2 3

我几乎可以用 pivot 得到我想要的东西:

>>>df.pivot(columns=0, values=1)
TIME VAL1 VAL2 VAL3
0 00:00:01 None None None
1 None 1 None None
2 None None 2 None
3 None None None 3
4 00:00:02 None None None
5 None 1 None None
6 None None 2 None
7 None None None 3

我可以合并行以获得我想要的:

>>> df.pivot(columns=0, values=1).ffill().drop_duplicates(subset='TIME',
keep='last').set_index('TIME')
TIME VAL1 VAL2 VAL3
00:00:01 1 2 3
00:00:02 1 2 3

但这似乎是一种相当笨拙的方法,会为大型数据集浪费大量内存。有没有更简单的方法?

我厌倦了查看 pd.DataFrame.from_items()pd.DataFrame.from_records() 但没有成功。

最佳答案

您需要一个“ID”变量来指示哪些行放在一起。在您想要的输出中,您隐含地假设 4 行的每个 block 都应该成为一行,但 pandas 不会假设,因为通常旋转应该能够将不连续的行组合在一起。您希望在新 DataFrame 中成为单行的每组行都必须具有一些共享值。

如果您的数据真的只是四行的 block ,您可以像这样创建 ID 变量:

df['ID'] = np.arange(len(df))//4

您可以看到 ID 变量现在标记了哪些行应该分组:

>>> df
0 1 ID
0 TIME 00:00:01 0
1 VAL1 1 0
2 VAL2 2 0
3 VAL3 3 0
4 TIME 00:00:02 1
5 VAL1 1 1
6 VAL2 2 1
7 VAL3 3 1

然后使用这个新列作为数据透视表的“索引”。

>>> df.pivot(index="ID", columns=0, values=1)
0 TIME VAL1 VAL2 VAL3
ID
0 00:00:01 1 2 3
1 00:00:02 1 2 3

关于python - 如何最好地使用 pandas.DataFrame.pivot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39538109/

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