gpt4 book ai didi

python - 如何使用 Python 将 CSV 数据从宽格式转置为长数据集

转载 作者:太空宇宙 更新时间:2023-11-03 19:45:28 25 4
gpt4 key购买 nike

我需要使用 Python 对任意数量的“项目”执行以下数据转换。前两列始终相同,然后可能有数千个“itemN”列,我希望将所有实际值放在一个新的单列中。

我尝试使用 pandas.wide_to_long 但据我所知,我会将新名称放入转置表中,如果项目数量发生变化,这将不起作用。

type   rid          item1 item2 item3
apple [81] 1.1 1.1 1.1
orange [82] 2.2 2.2 2.2
banana [41,42,43,52] 3.3 3.3 3.3
kiwi [90,95] 4.4 4.4 4.4

type   rid             gid   value
apple [81] item1 1.1
apple [81] item2 1.1
apple [81] item3 1.1
orange [82] item1 2.2
orange [82] item2 2.2
orange [82] item3 2.2
banana [41,42,43,52] item1 3.3
banana [41,42,43,52] item2 3.3
banana [41,42,43,52] item3 3.3
kiwi [90,95] item1 4.4
kiwi [90,95] item2 4.4
kiwi [90,95] item3 4.4

到目前为止,我已经尝试使用双 for 循环和索引切片与 numpy 数组并使用 pandas.wide_to_long。

a = np.array([['apple'  ,tuple([81]) ,1.1 ,1.1 ,1.1] ,['orange' ,tuple([82]) ,2.2 ,2.2 ,2.2],['banana' ,tuple([41,42,43,52]) ,3.3 ,3.3 ,3.3],['kiwi' ,tuple([90,95]) ,4.4 ,4.4 ,4.4]])
names = ['type' ,'rid' ,'item1' ,'item2' ,'item3']
df = pd.DataFrame(a,columns=names)

最佳答案

您可以将前 2 列放入索引中,堆叠生成的数据帧,然后重置索引:

df.set_index(['type', 'rid']).stack().reset_index()

给出:

      type            rid level_2    0
0 apple [81] item1 1.1
1 apple [81] item2 1.1
2 apple [81] item3 1.1
3 orange [82] item1 2.2
4 orange [82] item2 2.2
5 orange [82] item3 2.2
6 banana [41,42,43,52] item1 3.3
7 banana [41,42,43,52] item2 3.3
8 banana [41,42,43,52] item3 3.3
9 kiwi [90,95] item1 4.4
10 kiwi [90,95] item2 4.4
11 kiwi [90,95] item3 4.4

只需重命名新列即可:

df.set_index(['type', 'rid']).stack().reset_index().rename(columns={'level_2': 'gid',
0: 'value'})

给出预期的数据帧。

关于python - 如何使用 Python 将 CSV 数据从宽格式转置为长数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60171225/

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