根据另一列从 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 系列中的列表中选择元素的主要内容,如果未能解决你的问题,请参考以下文章