【问题标题】:pandas remove groups that each element have the same value on a column in every group熊猫删除每个组中每个元素在列上具有相同值的组
【发布时间】:2018-05-10 16:35:48
【问题描述】:

我需要为df 做一个groupby,然后在每个组中,我想检查该组中的每个元素在A 列上是否具有相同的值,如果是,则删除该组,

 df['cluster_id'] = df.groupby(['B', 'C', 'D'])['B'].transform('size')

 df = df.loc[
        df['cluster_id'] > 1 &
        df['cluster_id'] == df['cluster_id'] &
        df['A'] != df['A']]

但我有错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我想知道如何解决它。

【问题讨论】:

  • @cmaher thx 错误消失了
  • 您还有问题还是解决了?
  • @daiyue 有什么解决办法?

标签: python-3.x pandas dataframe pandas-groupby


【解决方案1】:

我猜() 不见了:

df =df[(df['cluster_id'] > 1) & (df['cluster_id'] == df['cluster_id']) & (df['A'] != df['A'])]

另外,似乎第二个条件是不必要的:

df = df[(df['cluster_id'] > 1) & (df['A'] != df['A'])]

也不需要新列,可以通过Series进行比较:

cluster_id = df.groupby(['B', 'C', 'D'])['B'].transform('size')

df = df[(cluster_id > 1) & (cluster_id == cluster_id) & (df['A'] != df['A'])]

df = df[(cluster_id > 1) & (df['A'] != df['A'])]

【讨论】:

  • 想知道为什么第二个条件不是必需的,条件指定元素应该在同一个组中。
  • @daiyue - Myabe 我错了,但(df['cluster_id'] == df['cluster_id']) 应该始终是Trues。 (如果不是NaNs
  • 在这种情况下如何正确指定一个条件来指示同一簇中的行?
  • @daiyue - 我创建样本df = pd.DataFrame({ 'A':[4,5,4,5,5,4,1,4,7], 'C':[1] * 9, 'D':[2] * 9, 'B':list('aaabbccde')})
  • @daiyue - 那么df['cluster_id'] == df['cluster_id'] 应该是什么?嗯,你觉得比较像df['cluster_id'] != df['A'] 吗?因为(df['A'] != df['A']) 总是返回False
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2019-08-18
  • 2022-07-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2021-12-27
  • 2019-03-27
相关资源
最近更新 更多