我有一个DataFrame
date price num_floors house
1 2023-01-01 94.30076 3 A
2 2023-01-01 95.58771 2 B
3 2023-01-02 102.78559 1 C
4 2023-01-03 93.29053 3 D
我想改变它,使每一列包含给定日期所有房屋的价格和num_floor。对于一列,列的前两行是指第一个房子,接下来的两行是指第二个房子。剩下的没有数据的条目用缺失值NaN填充,如下所示:
2023-01-01 2023-01-02 2023-01-03
1 94.30076 102.78559 93.29053
2 3 1 3
3 95.58771 NA NA
4 2 NA NA
我使用R成功了:
df_trans <- df %>%
pivot_longer(-date) %>%
mutate(index=row_number(), .by = date) %>%
pivot_wider(id_cols = index, names_from = date, values_from = value) %>%
select(-index)
但是当我尝试使用Python时,它并不像我想要的那样工作:
df_trans = df.melt(id_vars='date')
df_trans['n'] = df_trans.groupby('date').cumcount() + 1
df_trans = df_trans.pivot(index='n', columns='date', values='value')
3条答案
按热度按时间fgw7neuy1#
尝试:
图纸:
jvlzgdj92#
在各部分中:
1.按日期和累计计数分组,并按此分组
1.对于每个组,操作到所需的输出
1.连接群
3xiyfsfu3#
另一种可能的解决方案:
或者,
输出: