根据另一列从 Pandas 系列中的列表中选择元素

Posted

技术标签:

【中文标题】根据另一列从 Pandas 系列中的列表中选择元素【英文标题】:Select element from list in Pandas Series based on another column 【发布时间】:2020-03-01 18:47:33 【问题描述】:

我有一个如下形式的 Pandas DataFrame:

  Name         Dates        Trigger
  John       [d1,d2,d3]     1
  Mike       [d4]           NaN
  Li         [d1,d4,d5]     2

Dates 列中的行是 Python 列表,其中列表中的每个元素都是一个 DateTime 对象(例如“2019-08-15”)。

我的最终目标是在 Trigger 中提到的索引位置获得一个 Dates 之间的差异(以天为单位)的数组,从而生成一个新列,例如:

       Date_diff
   [d2-d1,d2-d2,d2-d3]
   [NaN]/d4
   [d5-d1,d5-d4,d5-d5]

无论我尝试了什么,我总是无法根据最后一列正确识别列表中的正确元素。有什么建议吗?

【问题讨论】:

【参考方案1】:

据我了解,您希望将 Trigger 作为元素列表中的索引,从中减去其他元素。我仍然不知道您要对与 Mike 对应的行说什么。

    从您的数据框(触发器)中创建第三列的list1 从您的数据框(日期)中创建第二列的list2 创建一个空的list3,这将是您的 Dates_Difference 列。 使用变量i 枚举list1,并使用变量j 遍历其中的list2,并继续将list2[i] - list2[j] 附加到list3。对i = NaN时的情况进行相应处理。 将 list3 作为新列插入到您的数据框中,名称为 Dates_diff

希望对你有帮助:)

【讨论】:

【参考方案2】:

处理完 NaN 后,以下解决方案有效:

df.apply(lambda row: row.Dates[row.Trigger], axis=1)

【讨论】:

以上是关于根据另一列从 Pandas 系列中的列表中选择元素的主要内容,如果未能解决你的问题,请参考以下文章

如何测试字符串包含列表中的元素并通过 Pandas 将目标元素分配给另一列

如果存在于列表中,则根据另一列的值选择列

使用窗口函数根据另一列从列中检索值

根据另一列将 pandas 列重新组合为 2D 列表

基于另一列从一列中删除单词,然后创建并将其放入新列

pandas:根据另一列中的值获取与相应索引的确切对应值