熊猫:在数据框中聚合列表

时间:2017-02-06 08:18:47

标签: python python-2.7 pandas

假设我有以下数据框:

   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

有没有人对此有一个简洁的解决方案?任何帮助将非常感激。提前谢谢!

1 个答案:

答案 0 :(得分:0)

使用numpy.diffnumpy.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]