假设我有以下数据框:
VehID Material JobNo
0 10000 5005 [1, 2]
1 10000 5100 [1, 2, 4, 5, 6]
2 10001 5222 [2, 3, 4]
3 10001 5888 [1, 3]
我想拉出'JobNo'中的列表元素以连续方式出现的实例。例如:
VehID Material JobNo Len
0 10000 5005 [1, 2] 2
1 10000 5100 [1, 2] 2
2 10000 5100 [5, 6] 2
3 10001 5222 [2, 3, 4] 3
有没有人对此有一个简洁的解决方案?任何帮助将非常感激。提前谢谢!
答案 0 :(得分:0)
使用numpy.diff
,numpy.split
分解非连续的
def split_jobs(x):
return np.split(x, np.where(np.append(False, np.diff(x) != 1))[0])
j = df.JobNo.apply(split_jobs)
l1 = j.str.len()
slc = np.arange(len(df)).repeat(l1)
d1 = pd.DataFrame(dict(
VehID=df.VehID.values[slc],
Material=df.Material.values[slc],
JobNo=list(chain(*j.tolist()))
))[df.columns.tolist()]
d1[d1.JobNo.str.len() > 1]
VehID Material JobNo
0 10000 5005 [1, 2]
1 10000 5100 [1, 2]
2 10000 5100 [4, 5, 6]
3 10001 5222 [2, 3, 4]