python - 填充 groupby 对象的序列,Pandas
问题描述
这是我的数据框的示例,
d = {'id':['aa','aa','aa','aa','dd','dd','dd','ee','ee','ee','ee','ee'],
'B': [3,2.9,4,2.3,3.1,2.2,2.9,4,2.3,3.3,2.9,3],
'C':[1.9,2.2,2.9,0.2,1,2.1,1.3,3,3.1,2.2,2.9,0.2]}
df = pd.DataFrame(data=d)
df['tp'] = pd.to_timedelta(df.groupby('id').cumcount() * 30, unit='S')
df.set_index('tp', inplace=True)
我正在尝试填充(后填充)上述数据框,以便每个唯一 ID 具有相同的形状。
我是这样开始的
g = df.groupby('id')
for id, id_unique in g:
print(id_unique)
我希望每个id_unique
都具有相同的形状。即(4,3)。因此,所有唯一 ID 将具有相同的计数。
如果它是一个系列,我可以填充序列;
pad_sequences(data, padding='post', maxlen=max_seq)
但是我不知道如何填充数据框。
像...
A B C id
tp
00:00:00 1.0 3.0 1.9 aa
00:00:30 1.0 2.9 2.2 aa
00:01:00 2.1 4.0 2.9 aa
00:01:30 1.3 2.3 0.2 aa
00:02:00 0.0 0.0 0.0 aa
A B C id
tp
00:00:00 1.1 3.1 1.0 dd
00:00:30 1.2 2.2 2.1 dd
00:01:00 1.9 2.9 1.3 dd
00:01:30 0.0 0.0 0.0 dd
00:02:00 0.0 0.0 0.0 dd
A B C id
tp
00:00:00 1.0 4.0 3.0 ee
00:00:30 2.1 2.3 3.1 ee
00:01:00 1.3 3.3 2.2 ee
00:01:30 0.9 2.9 2.9 ee
00:02:00 2.0 3.0 0.2 ee
这将是我的新数据框。
A B C
tp
00:00:00 1.0 3.0 1.9
00:00:30 1.0 2.9 2.2
00:01:00 2.1 4.0 2.9
00:01:30 1.3 2.3 0.2
00:02:00 0.0 0.0 0.0
00:00:00 1.1 3.1 1.0
00:00:30 1.2 2.2 2.1
00:01:00 1.9 2.9 1.3
00:01:30 0.0 0.0 0.0
00:02:00 0.0 0.0 0.0
00:00:00 1.0 4.0 3.0
00:00:30 2.1 2.3 3.1
00:01:00 1.3 3.3 2.2
00:01:30 0.9 2.9 2.9
00:02:00 2.0 3.0 0.2
解决方案
reindex
idx = pd.MultiIndex.from_product(
[df.index.unique(), df['id'].unique()], names=['tp', 'id'])
(df.set_index('id', append=True)
.reindex(idx, fill_value=0).sort_index(level=[1, 0]).reset_index(1))
id B C
tp
00:00:00 aa 3.0 1.9
00:00:30 aa 2.9 2.2
00:01:00 aa 4.0 2.9
00:01:30 aa 2.3 0.2
00:02:00 aa 0.0 0.0
00:00:00 dd 3.1 1.0
00:00:30 dd 2.2 2.1
00:01:00 dd 2.9 1.3
00:01:30 dd 0.0 0.0
00:02:00 dd 0.0 0.0
00:00:00 ee 4.0 3.0
00:00:30 ee 2.3 3.1
00:01:00 ee 3.3 2.2
00:01:30 ee 2.9 2.9
00:02:00 ee 3.0 0.2
stack
df.set_index('id', append=True).unstack(fill_value=0, level=0).stack()
B C
id tp
aa 00:00:00 3.0 1.9
00:00:30 2.9 2.2
00:01:00 4.0 2.9
00:01:30 2.3 0.2
00:02:00 0.0 0.0
dd 00:00:00 3.1 1.0
00:00:30 2.2 2.1
00:01:00 2.9 1.3
00:01:30 0.0 0.0
00:02:00 0.0 0.0
ee 00:00:00 4.0 3.0
00:00:30 2.3 3.1
00:01:00 3.3 2.2
00:01:30 2.9 2.9
00:02:00 3.0 0.2
推荐阅读
- reactjs - 如何设置 MUI TreeItem 标签的样式?
- python - 如何使用 Beautiful soup 从标签中提取内容
- java - 基于语言环境显示数据的最佳方式 - spring mvc 中的相同表字段
- javascript - 如何使用 Javascript 将 POST 数据发送到新页面?
- rust - 如何在最新版本(3.3.2)中实现 Actix-web 中间件?
- c++ - 如何从具有特定值作为其第一个值的对向量中删除所有对
- javascript - 如何删除元素的所有子节点
- python - 创建多个按钮并将它们绑定到相应的标签
- python - python生成的csv中的空行
- c++ - 释放内存时出现av_free异常,只针对这个视频文件