python - 如何删除 pandas df 中具有相同值但顺序不同的行?

标签 python pandas dataframe pandas-groupby

我用 Python 编写了以下代码:

df=df.groupby(['card1', 'card2']).size().reset_index().rename(columns{0:'count'})
df['hand']=df['card1']+', '+df['card2']
df

给出以下输出:

card1   card2   count   hand
  2c     7h       1     2c, 7h
  2c     7s       1     2c, 7s
  7h     2c       1     7h, 2c

我想得到这样的输出:

card1   card2   count   hand
  2c     7h       2     2c, 7h
  2c     7s       1     2c, 7s

对我来说,哪张牌是第一张并不重要(因此输出 1 和 3 应该算作同一手牌。我不知道如何做到这一点。

最佳答案

我会退一步,通过 np.sort 对每一行进行排序,然后使用groupby + size:

cols = ['card1', 'card2']

res = pd.DataFrame(np.sort(df[cols].values, axis=1), columns=cols)\
        .groupby(cols).size().rename('count').reset_index()

如果您需要逗号分隔的系列,在较小的结果上创建它会更有效:

res['hand'] = res['card1'] + ', ' + res['card2']

print(res)

  card1 card2  count    hand
0    2c    7h      2  2c, 7h
1    2c    7s      1  2c, 7s

关于python - 如何删除 pandas df 中具有相同值但顺序不同的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53175987/

相关文章:

python - 如何根据 'Parent' 进行索引和排序?

python - pandas DataFrame 中 x 天内每个元素的累积乘积

python - 在 Pandas 查询中使用变量

python - 如何传递多个输入值并将结果附加回 pandas 数据框

scala - 我如何在 Spark/Scala 中使用 countDistinct?

python - 使用 python pandas DataFrame 上其他列的信息创建新列

python - 如何将 group by Keys 应用到相关组

Python 2D 列表性能,没有 numpy

python - 在 Pandas 中进行多列分组后,如何计算每个组的子组内的平均计数?

python - 加入 pandas 系列字符串