pandas 数据框中的分组周期数据
Group periodic data in pandas dataframe
我有一个 pandas 数据框,如下所示:
idx
A
B
01/01/01 00:00:01
5
2
01/01/01 00:00:02
4
5
01/01/01 00:00:03
5
4
02/01/01 00:00:01
3
8
02/01/01 00:00:02
7
4
02/01/01 00:00:03
1
3
我想根据数据的周期性对数据进行分组,这样最终的数据帧是:
new_idx
01/01/01
02/01/01
old_column
00:00:01
5
3
A
00:00:02
4
7
A
00:00:03
5
1
A
00:00:01
2
8
B
00:00:02
5
4
B
00:00:03
4
3
B
当第一个数据帧变大(更多的列、更多的周期和更多的样本)时,有没有办法解决这个问题?
一种方法是melt
DataFrame,然后将日期时间拆分为日期和时间;最后 pivot
最终输出的结果 DataFrame:
df = df.melt('idx', var_name='old_column')
df[['date','new_idx']] = df['idx'].str.split(expand=True)
out = df.pivot(['new_idx','old_column'], 'date', 'value').reset_index().rename_axis(columns=[None]).sort_values(by='old_column')
输出
new_idx old_column 01/01/01 02/01/01
0 00:00:01 A 5 3
2 00:00:02 A 4 7
4 00:00:03 A 5 1
1 00:00:01 B 2 8
3 00:00:02 B 5 4
5 00:00:03 B 4 3
我有一个 pandas 数据框,如下所示:
idx | A | B |
---|---|---|
01/01/01 00:00:01 | 5 | 2 |
01/01/01 00:00:02 | 4 | 5 |
01/01/01 00:00:03 | 5 | 4 |
02/01/01 00:00:01 | 3 | 8 |
02/01/01 00:00:02 | 7 | 4 |
02/01/01 00:00:03 | 1 | 3 |
我想根据数据的周期性对数据进行分组,这样最终的数据帧是:
new_idx | 01/01/01 | 02/01/01 | old_column |
---|---|---|---|
00:00:01 | 5 | 3 | A |
00:00:02 | 4 | 7 | A |
00:00:03 | 5 | 1 | A |
00:00:01 | 2 | 8 | B |
00:00:02 | 5 | 4 | B |
00:00:03 | 4 | 3 | B |
当第一个数据帧变大(更多的列、更多的周期和更多的样本)时,有没有办法解决这个问题?
一种方法是melt
DataFrame,然后将日期时间拆分为日期和时间;最后 pivot
最终输出的结果 DataFrame:
df = df.melt('idx', var_name='old_column')
df[['date','new_idx']] = df['idx'].str.split(expand=True)
out = df.pivot(['new_idx','old_column'], 'date', 'value').reset_index().rename_axis(columns=[None]).sort_values(by='old_column')
输出
new_idx old_column 01/01/01 02/01/01
0 00:00:01 A 5 3
2 00:00:02 A 4 7
4 00:00:03 A 5 1
1 00:00:01 B 2 8
3 00:00:02 B 5 4
5 00:00:03 B 4 3