Python groupby对象的填充顺序,熊猫
这是我的数据帧示例Python groupby对象的填充顺序,熊猫,python,pandas,padding,Python,Pandas,Padding,这是我的数据帧示例 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.gro
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\u唯一的具有相同的形状。i、 e(4,3)。因此,所有唯一id将具有相同的计数
我可以垫序列,如果它是一个系列使用
pad_sequences(data, padding='post', maxlen=max_seq)
但我不知道如何填充数据帧
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
像
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
堆栈
reindex
你能解释一下A
是从哪里来的吗?如果它只是另一个专栏,我的答案应该仍然有效,但如果它应该以某种方式创建,我会感到困惑。我认为这只是他的输入数据框架中的一个错误。我会取消删除你的解决方案。谢谢,看起来更干净了。我有点失望,因为《产品》中的没有从单个系列中推断出具有该属性的名称。伟大的头脑等等。。。看看我删除的答案。你可以看到我处理它的方式有点不同。我不会删除你的!我喜欢更实用的方法非常感谢!你们是救命恩人。
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
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
def f(d):
return pd.MultiIndex.from_product(d.index.levels, names=d.index.names)
def g(d):
return d.reindex(f(d), fill_value=0)
df.set_index('id', append=True).pipe(g) \
.reset_index('id').sort_values(['id', 'tp'])
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