在以下数据框中,
date, lane, measure1,measure2,
2019-05-03 00:00:00,lane1,1.0,
2019-05-03 00:00:00,lane2,2.0,
2019-05-03 00:00:00,lane1,,3.0
2019-05-03 00:00:00,lane2,,4.0
每行都包含小节1的值或小节2的行。我想合并两行并创建一个像这样的数据框:
date, lane, measure1,measure2,
2019-05-03 00:00:00,lane1,1.0,3.0
2019-05-03 00:00:00,lane2,2.0,4.0
如您所见,,数据格式是这样的:日期和泳道的组合是唯一的(但不仅是其中之一)。时间用作索引。
我的解决方案是执行以下操作:
def unify(name, group):
time, lane, lane = name
row = pd.Series({
'lane' : lane,
'measure1' : group['measure1'].mean(skipna=True),
"measure2" : group['measure2'].mean(skipna=True))
row.name = time
return row
grouped = df.groupby(by=[df.index, 'lane'])
u_df = grouped.apply(lambda x: unify(x.name, x))
但是,由于组的数量几乎是数据帧大小的一半,因此实际数据帧很大(30k),并且此方法很慢(处理过程需要30s)。几乎是因为有时缺少度量,并且跳过了一行。
您能提出更好的选择吗?