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

标签 python python-3.x pandas

<分区>

我有一个 pandas DataFrame,其中一列 resources 由一个元组列表组成。例如,采用以下 DataFrame:

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 包含一个列表,其中包含 resources 中元组的唯一第一个元素(因此基本上是所有第一个元素的集合)
  • second 包含一个列表,其中包含 resources 中元组的唯一第二个元素(因此基本上是所有第二个元素的集合)
  • same 列包含 resources 中具有相同第一和第二元素的元组数
  • 一列 different 包含 resources 中具有不同第一和第二元素的元组数

所需的输出列如下所示:

  • 首先:[[1, 2], [3], [9, 2, 5]]
  • 第二个:[[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                 resources      first     second  same  different
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

关于python - 如何在 Python 中对包含元组列表的 pandas DataFrame 列执行各种操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67221687/

相关文章:

python - 无需下载即可获取pdf的大小

python - Django DRF 使用 CreateListModelMixin 更改序列化器数据

Python数组尺寸大,时间成本高

python - 从 Python 中的字典列表创建 JSON

python - Django 自定义注解函数

python-3.x - 平铺窗口大小调整问题

python-3.x - Lattice Diamond 命令行工具不知道 'synthesis' 命令

python - 使用 NumPy 函数计算 Pandas 的加权平均值

python - 如何通过 Pandas 的出生日期获取年龄列?

python - python中好的自动化系统测试框架