Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中对包含元组列表的DataFrame列执行各种操作?_Python_Python 3.x_Pandas - Fatal编程技术网

如何在Python中对包含元组列表的DataFrame列执行各种操作?

如何在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)],

我有一个pandas数据框架,其中一列
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,但没有成功。然后我去那里寻找所有的功能,找不到更有用的了,非常感谢!设置前使用“*”的目的是什么?非常感谢!设置前使用“*”的目的是什么?