如何在Python中对包含元组列表的DataFrame列执行各种操作?
我有一个pandas数据框架,其中一列如何在Python中对包含元组列表的DataFrame列执行各种操作?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个pandas数据框架,其中一列resources由元组列表组成。例如,以以下数据帧为例: df = pd.DataFrame({"id": [1, 2, 3], "resources": [[(1, 3), (1, 1), (2, 9)], [(3, 1), (3, 1), (3, 4)],
resources
由元组列表组成。例如,以以下数据帧为例:
df = pd.DataFrame({"id": [1, 2, 3],
"resources": [[(1, 3), (1, 1), (2, 9)],
[(3, 1), (3, 1), (3, 4)],
[(9, 0), (2, 6), (5,5)]]
})
现在,我想将以下列添加到我的DataFrame中,其中包含以下内容:
- 一列
,包含一个列表,其中包含first
资源中元组的唯一第一个元素(因此基本上是所有第一个元素的集合)
- 一列
,包含一个列表,其中包含second
资源中元组的唯一第二个元素(因此基本上是所有第二个元素的集合)
- 一列
,包含same
中具有相同第一和第二元素的元组数resources
- 包含
中具有不同第一和第二元素的元组数的列resources
different
:第一个
[[1,2],[3],[9,2,5]
:second
[[1,3,9],[1,4],[0,6,5]
:相同
[1,0,1]
:不同的
[2,3,2]
Series.str
,但在那里找不到足够的功能来实现我的目标
df["first"] = df["resources"].apply(lambda x: [*set(i for i, _ in x)])
df["second"] = df["resources"].apply(lambda x: [*set(i for _, i in x)])
df["same"] = df["resources"].apply(lambda x: sum(len(set(t)) == 1 for t in x))
df["different"] = df["resources"].apply(
lambda x: sum(len(set(t)) > 1 for t in x)
)
print(df)
印刷品:
id资源第一秒相同不同
0 1 [(1, 3), (1, 1), (2, 9)] [1, 2] [1, 3, 9] 1 2
1 2 [(3, 1), (3, 1), (3, 4)] [3] [1, 4] 0 3
2 3 [(9, 0), (2, 6), (5, 5)] [9, 2, 5] [0, 5, 6] 1 2
印刷品:
id资源第一秒相同不同
0 1 [(1, 3), (1, 1), (2, 9)] [1, 2] [1, 3, 9] 1 2
1 2 [(3, 1), (3, 1), (3, 4)] [3] [1, 4] 0 3
2 3 [(9, 0), (2, 6), (5, 5)] [9, 2, 5] [0, 5, 6] 1 2
请重复并从中删除。“演示如何解决此编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后就您的算法或技术提出具体问题。堆栈溢出并不是为了取代现有的文档和教程。我在回答中提到,我尝试使用Series.str,但没有成功。然后我去那里寻找所有的功能,没有找到任何更有用的,请重复和从。“演示如何解决此编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后就您的算法或技术提出具体问题。堆栈溢出并不是为了取代现有的文档和教程。我在回答中提到,我尝试使用Series.str,但没有成功。然后我去那里寻找所有的功能,找不到更有用的了,非常感谢!设置前使用“*”的目的是什么?非常感谢!设置前使用“*”的目的是什么?