我有一个以下形式的数据框
df = pd.DataFrame({'Start':['47q2',None, None,'49q1',None,None],
'Threshold':[None, '47q3', None,None, '49q2', None],
'End':[None, None, '48q1',None, None, '50q2'],
'Series':['S1','S1','S1','S2','S2','S2']})
End Series Start Threshold
0 None S1 47q2 None
1 None S1 None 47q3
2 48q1 S1 None None
3 None S2 49q1 None
4 None S2 None 49q2
5 50q2 S2 None None
我想重塑数据帧,以便获得信息
df_wanted = pd.DataFrame({'Start':['47q2','49q1'],
'Threshold':['47q3','49q2'],
'End':['48q1','50q2'],
'Series':['S1','S2']})
End Series Start Threshold
0 48q1 S1 47q2 47q3
1 50q2 S2 49q1 49q2
也就是说,我希望每个系列只占用一行,并在其他列中获得有关开始,结束和阈值的信息 .
我尝试使用groupby和agg - 但是因为它们是字符串,所以我无法使用它 . 我不确定什么样的功能可以实现这一目标 .
我不确定它是否有任何区别,这个数据帧是由另一个构成的,它有无条目 - 但是这个数据帧显示为NaN(但我不知道如何重现它作为一个例子) .
2 回答
Option 1
使用
groupby
first
.Option 2
使用
groupby
apply
的较慢解决方案 .应用逻辑填充漏洞,最后的
drop_duplicates
调用会丢弃冗余行 .set_index
stack