【问题标题】:how find the identical rows in a DataFrame -- python如何在 DataFrame 中找到相同的行——python
【发布时间】:2015-11-09 16:48:22
【问题描述】:

我有一个如下的DataFrame A,我想在它们的前3列中找到具有相同值的行。

import pandas as pd
import io
import numpy as np
import datetime
A= """
   c0   c1   c2   c3   c4
0  1    a    d    3    4
1  1    a    c    0    0
2  1    a    d    3    1
3  1    b    c    0    0
4  2    b    d    8    5
5  2    b    d    3    3
    """

df = pd.read_csv(io.StringIO(A), delimiter='\s+')
df2= pd.DataFrame(df, columns=['c0', 'c1', 'c2'])
for i in range(0,4):
    row1 = df2.irow(i)
    row2 = df2.irow(i+1)
    val=all(unique_columns = row1 != row2)   
    print(i)

我希望它打印2, 5

好吧,这不起作用,即使它无法获取彼此跟随的行。

或者,我尝试了np.unique(df2),看看列数是否与df2不同,这也不起作用。

感谢任何帮助。

【问题讨论】:

  • ...但只有第 2 行在 c0-c2 中的值与第 0 行相同,第 6 行没有。
  • @CTZhu,是的,但是第 5 行的值与第 4 行的值相同。

标签: python numpy pandas dataframe


【解决方案1】:

IIUC 然后使用duplicated:

In [132]:
df2.index[df2.duplicated()]

Out[132]:
Int64Index([2, 6], dtype='int64')

之所以有效,是因为它检测到任何行何时具有重复值,因为df2 是感兴趣的列的子集,然后所有列都将被测试。

编辑

df2 在这里似乎是多余的,你可以这样做:

In [133]:
df.index[df.duplicated(subset=['c0', 'c1', 'c2'])]

Out[133]:
Int64Index([2, 6], dtype='int64')

【讨论】:

  • 可能包括 subset,因为只需要前 3 列。
  • 你说得对,OP 可能需要考虑删除 df2 以防止不必要的步骤并可能使数据翻倍
【解决方案2】:
In [211]: a.groupby(['c0','c1','c2']).indices
Out[211]:
{(1, 'a', 'c'): array([1]),
 (1, 'a', 'd'): array([0, 2]),
 (1, 'b', 'c'): array([3]),
 (2, 'b', 'd'): array([4, 5])}

这应该可以解决问题。

【讨论】:

  • 当您真正关心组并希望对数据进行分类时,这非常有用。谢谢。
猜你喜欢
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 2012-11-25
  • 2021-08-08
  • 2015-12-03
  • 2021-07-02
  • 2018-03-04
  • 2022-01-08
相关资源
最近更新 更多