要在dataframe中透视的多个值

2024-04-27 01:08:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,我想在其中透视整个数据帧,使用某些列作为值

资料

id  date    sun moon    stars   total   pcp base    final   status  space   galaxy
aa  Q1 21   5   1       2       8       0   200     41      5       1       1
aa  Q2 21   4   1       2       7       1   200     50      6       2       1

渴望的

id  date    type    pcp base    final   final2  status  type2   final3
aa  Q1 21   sun     0   200     41      5       5       space   1
aa  Q1 21   moon    0   200     41      1       5       galaxy  1
aa  Q1 21   stars   0   200     41      2       5       space   1
aa  Q2 21   sun     1   200     50      4       6       space   2
aa  Q2 21   moon    1   200     50      1       6       galaxy  1
aa  Q2 21   stars   1   200     50      2       6       space   2

df.drop(columns='total').melt(['id','date','final','final2','base','ppp'],var_name='type',value_name='ppp')

这在旋转第一组值(太阳、月亮等)时效果很好,但是不确定如何合并第二组空间和星系。 如有任何建议,我们将不胜感激


Tags: 数据idbasedatespacegalaxyfinalaa
1条回答
网友
1楼 · 发布于 2024-04-27 01:08:22

这是部分答案:

cols = ['id', 'date', 'pcp', 'base', 'final', 'status']

df = df.drop(columns='total')

df1 = df.melt(id_vars=cols, value_vars=['sun', 'moon', 'stars'], var_name='type')
df2 = df.melt(id_vars=cols, value_vars=['galaxy', 'space'], var_name='type2')

out = pd.merge(df1, df2, on=cols)

此时,您的数据帧看起来像:

>>> out
    id   date  pcp  base  final  status   type  value_x   type2  value_y
0   aa  Q1 21    0   200     41       5    sun        5  galaxy        1
1   aa  Q1 21    0   200     41       5    sun        5   space        1
2   aa  Q1 21    0   200     41       5   moon        1  galaxy        1
3   aa  Q1 21    0   200     41       5   moon        1   space        1
4   aa  Q1 21    0   200     41       5  stars        2  galaxy        1
5   aa  Q1 21    0   200     41       5  stars        2   space        1
6   aa  Q2 21    1   200     50       6    sun        4  galaxy        1
7   aa  Q2 21    1   200     50       6    sun        4   space        2
8   aa  Q2 21    1   200     50       6   moon        1  galaxy        1
9   aa  Q2 21    1   200     50       6   moon        1   space        2
10  aa  Q2 21    1   200     50       6  stars        2  galaxy        1
11  aa  Q2 21    1   200     50       6  stars        2   space        2

现在的问题是如何设置total3来减少数据帧

相关问题 更多 >