python–Pandas:在列中聚合列表值

python–Pandas:在列中聚合列表值,第1张

概述我有以下数据帧:data = {'VehID' : pd.Series([10000,10000,10000,10001,10001,10001,10001]), 'JobNo' : pd.Series([1,2,2,1,2,3,3]), 'Material' : pd.Series([5005,5100,5005,5888,

我有以下数据帧:

data = {'VehID' : pd.SerIEs([10000,10000,10001,10001]),'JobNo' : pd.SerIEs([1,2,1,3,3]),'Material' : pd.SerIEs([5005,5100,5005,5888,5222,5222])}df   = pd.DataFrame(data,columns=['VehID','JobNo','Material'])

它看起来像这样:

   VehID    JobNo  Material0  10000      1      50051  10000      2      51002  10000      2      50053  10001      1      58884  10001      2      52225  10001      3      58886  10001      3      5222

我想确定每辆车连续工作中出现的材料.例如,

VehID  Material  Jobs10000    5005    [1,2]10001    5222    [2,3]

我想避免使用for循环.有没有人对这个解决方案有什么建议?提前致谢..最佳答案您可以先将数据收集到列表中,使用pandas.DataFrame.groupby,然后将pandas.DataFrame.applylist构造函数作为函数收集:

>>> res = df.groupby(['VehID','Material'])['JobNo'].apply(List).reset_index()>>> res   VehID  Material   JobNo0  10000      5005  [1,2]1  10000      5100     [2]2  10001      5222  [2,3]3  10001      5888  [1,3]

现在您可以过滤掉所有非连续列表:

>>> f = res.JobNo.apply(lambda x: len(x) > 1 and sorted(x) == range(min(x),max(x)+1))>>> res[f]   VehID  Material   JobNo0  10000      5005  [1,2]2  10001      5222  [2,3]

您可以通过更智能的功能加速它 – 首先在res中存储alreadt排序列表,然后检查min,max和len与相同长度的范围 总结

以上是内存溢出为你收集整理的python – Pandas:在列中聚合列表值全部内容,希望文章能够帮你解决python – Pandas:在列中聚合列表值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206234.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存