这是我的数据框示例,
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
答案 0 :(得分:4)
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
答案 1 :(得分:3)
reindex
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