python - 如何在 Pandas 列表列中获取唯一列表
问题描述
我有以下数据框:
import pandas as pd
df = pd.DataFrame({'name': ["John", "Jack", "Jeff", "Kate"], "hobbies":[["pirates"], ["pirates"], ["climbing", "yoga"], ["yoga"]]})
# name hobbies
# 0 John [pirates]
# 1 Jack [pirates]
# 2 Jeff [climbing, yoga]
# 3 Kate [yoga]
我想要一份兴趣爱好中的独特列表。为了清楚起见,我不想要独特爱好的列表(即["pirates", "climbing", "yoga"]
),这已经包含在几个问题中,包括这个问题:pandas get unique values from column of lists
我想要列表[['pirates'], ['yoga'], ['climbing', 'yoga']]
。
我想到了以下方式,但这似乎不是很“熊猫”:
[list(t) for t in {tuple(h) for h in df["hobbies"]}]
有更好的方法吗?
解决方案
让我们改变list
totuple
这样我们就可以做到drop_duplicates
out = df.hobbies.apply(tuple).drop_duplicates().apply(list).tolist()
Out[143]: [['pirates'], ['climbing', 'yoga'], ['yoga']]
如果您不需要转换回list
,您可以执行以下操作:
df.hobbies.apply(tuple).unique()
推荐阅读
- sql - 如何在 SQL 中获取连续的天数并在不再连续时中断
- java - 在我进入另一个分支并返回后,我看不到我在 git 分支中所做的文件更改
- search - bash - 如何使用正则表达式通配符附加到 sed 命令
- java - Jasper Reports:子报告在主报告中显示空值,数据源是一个 java 列表
- r - 将环境变量传递给 shinyapps.io
- node.js - 在 NodeJS 应用程序中存储远程 API 的身份验证令牌的最佳方式是什么?
- delphi - 试图找到文件位置,我得到了这个错误(错误记录,需要对象或类类型)
- ios - 对不支持多窗口的应用程序使用场景委托
- r - 使用 dplyr 按列类别将具有多行值的数据框重组为单行
- python-3.x - 没有一个有 for 循环的函数在工作