Pet*_*ter 1 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)]]
})
Run Code Online (Sandbox Code Playgroud)
现在,我想将以下列添加到我的 DataFrame 中,其中包含以下内容:
first包含一个列表的列,其中元组的第一个元素是唯一的resources(所以基本上是所有第一个元素的集合)second包含一个列表的列,其中包含元组的唯一第二个元素resources(因此基本上是所有第二个元素的集合)same包含resources具有相同第一个和第二个元素的元组数的列different包含resources具有不同第一和第二元素的元组数的列所需的输出列如下所示:
first: [[1, 2], [3], [9, 2, 5]]second: [[1, 3, 9], [1, 4], [0, 6, 5]]same: [1, 0, 1]different: [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)
Run Code Online (Sandbox Code Playgroud)
印刷:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30 次 |
| 最近记录: |