【问题标题】:pandas dataframe count unique list熊猫数据帧计数唯一列表
【发布时间】:2017-12-20 08:00:36
【问题描述】:

如果数据框中的列类型是intfloatstring,我们可以通过columnName.unique() 获取其唯一值。 但是,如果此列是一个列表,例如[1、2、3]。 我怎样才能得到这个专栏的unique

【问题讨论】:

  • 取值并将其展平
  • 然后您想知道每个列表的唯一元素还是整个列表是否唯一?
  • 我想获取唯一列表而不是列表中的唯一值。

标签: python pandas dataframe


【解决方案1】:

我认为您可以将值转换为元组,然后 unique 工作得很好:

df = pd.DataFrame({'col':[[1,1,2],[2,1,3,3],[1,1,2],[1,1,2]]})
print (df)
            col
0     [1, 1, 2]
1  [2, 1, 3, 3]
2     [1, 1, 2]
3     [1, 1, 2]

print (df['col'].apply(tuple).unique())

[(1, 1, 2) (2, 1, 3, 3)]

L = [list(x) for x in df['col'].apply(tuple).unique()]
print (L)

[[1, 1, 2], [2, 1, 3, 3]]

【讨论】:

  • 对不起,我的描述可能不清楚。我想获取唯一列表,而不是此列中的唯一值。
  • 好的,您可以创建示例数据 - 5 行的预期输出吗?
  • 例如,如果列 'col' 是 [[1, 2, 3], [1, 2, 3], [3, 4, 5], [1, 2, 3]] , 那么结果应该是 [[1, 2, 3], [3, 4, 5]]。
【解决方案2】:

您不能将unique() 应用于列表等不可散列的类型。您需要转换为可散列类型才能执行此操作。

使用最新版本的 pandas 的更好解决方案是使用 duplicated(),并且您可以避免迭代值以再次转换为列表。

df[~df.col.apply(tuple).duplicated()]

这将作为唯一值列表返回。

【讨论】:

  • 是的,这样看起来更有效率。
猜你喜欢
  • 1970-01-01
  • 2022-08-13
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多