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

时间:2018-11-06 16:27:01

标签: 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应该算作同一手牌。我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

我会退后一步,通过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