[PYTHON] Probieren Sie verschiedene Zeilen aus, in denen eine Spalte in pandas.DataFrame eindeutig ist

--Umgebung --macOS Catalina Version 10.15.7 - Python 3.8.5 - pandas 1.1.3

Die Beispieldaten sind solche Daten, die aus CSV gelesen wurden. Konzentrieren Sie sich auf die Spalte [ID] dieser Daten und probieren Sie verschiedene eindeutige Zeilen aus.

if __name__ == '__main__':
    df = pandas.read_csv('CSV.csv')
    print(df)
#ID Datum Start Ende
# 0   20.0  10/14   9:00  18:00
# 1   16.0  10/15  10:00  19:00
# 2   39.0  10/16  11:00  20:00
# 3    NaN  10/17  12:00  21:00
# 4   47.0  10/18  20:00  22:00
# 5   29.0  10/19  11:00  12:00
# 6   62.0  10/20  15:00  17:00
# 7    NaN  10/21  16:00  18:00
# 8   16.0  10/22  17:00  19:00
# 9    3.0  10/23  18:00  20:00
# 10  16.0  10/24  19:00  21:00
# 11  20.0  10/25  20:00  21:00
Linie
Nummer
ID Datum ... [ID]Doppelte Spalten
しているLinie
0 20.0 10/14 ... o
1 16.0 10/15 ... o
2 39.0 10/16 ...
3 NaN 10/17 ... o
4 47.0 10/18 ...
5 29.0 10/19 ...
6 62.0 10/20 ...
7 NaN 10/21 ... o
8 16.0 10/22 ... o
9 3.0 10/23 ...
10 16.0 10/24 ... o
11 20.0 10/25 ... o

Erhalten Sie eindeutige Zählungen für jede Spalte

--Referenz: Zählen Sie die Anzahl und Häufigkeit (Anzahl der Vorkommen) eindeutiger Elemente in Pandas | note.nkmk.me

#Bei Einbeziehung von NaN
print(df.nunique(dropna=False)['ID'])
# 8

#Wenn NaN ausgeschlossen ist
print(df.nunique()['ID'])
# 7

Ermitteln Sie den Wert und die Anzahl der Fälle, wenn diese in einer beliebigen Spalte eindeutig sind

--Referenz - pandas.DataFrame.value_counts — pandas 1.1.3 documentation - pandas.DataFrame.groupby — pandas 1.1.3 documentation

der Unterschied groupby value_counts Bemerkungen
Spaltenüberschrift Ja Keiner
Sortieren Spaltenwert Frequenz sort=Bei der Einstellung "Falsch" ist die Reihenfolge dieselbe
#Bei Einbeziehung von NaN
print(df.groupby('ID', dropna=False).size())
# ID
# 3.0     1
# 16.0    3
# 20.0    2
# 29.0    1
# 39.0    1
# 47.0    1
# 62.0    1
# NaN     2
# dtype: int64
print(df['ID'].value_counts(dropna=False))
# 16.0    3
# NaN     2
# 20.0    2
# 3.0     1
# 62.0    1
# 29.0    1
# 47.0    1
# 39.0    1
# Name: ID, dtype: int64

#Wenn NaN ausgeschlossen ist
print(df.groupby('ID', sort=False).size())
print(df['ID'].value_counts(sort=False))
# 20.0    2
# 16.0    3
# 39.0    1
# 47.0    1
# 29.0    1
# 62.0    1
# 3.0     1
# Name: ID, dtype: int64

Ermitteln Sie den Wert und die Anzahl der doppelten Zeilen

#Bei Einbeziehung von NaN
val_con = df.groupby('ID', dropna=False).size()
print(val_con[val_con >= 2])
# ID
# 16.0    3
# 20.0    2
# NaN     2
# dtype: int64

#Wenn NaN ausgeschlossen ist
val_con = df['ID'].value_counts()
print(val_con[val_con >= 2])
# 16.0    3
# 20.0    2
# Name: ID, dtype: int64

Bestimmen Sie Zeilen mit doppelten beliebigen Spalten

--Referenz - pandas.DataFrame.duplicated — pandas 1.1.3 documentation

#Bei Einbeziehung von NaN
print(df.duplicated(subset=['ID']))
# 0     False
# 1     False
# 2     False
# 3     False
# 4     False
# 5     False
# 6     False
# 7      True
# 8      True
# 9     False
# 10     True
# 11     True
# dtype: bool

#Wenn NaN ausgeschlossen ist
print(df.dropna(subset=['ID']).duplicated(subset=['ID']))
# 0     False
# 1     False
# 2     False
# 4     False
# 5     False
# 6     False
# 8      True
# 9     False
# 10     True
# 11     True
# dtype: bool

duplicated ist standardmäßig False für die erste doppelte Zeile ( keep = 'first'). Abhängig von dem für keep angegebenen Wert ändert sich, welcher Teil der doppelten Zeile zu "False" wird.

Wert von behalten ID keep='first'
(Standard)
keep='last' keep=False
0 20 False True True
1 16 False True True
2 False False False
3 NaN False True True
4 False False False
5 False False False
6 False False False
7 NaN True False True
8 16 True True True
9 False False False
10 16 True False True
11 20 True False True

Stellen Sie fest, ob eine Spalte dupliziert ist

# df.shape[0]Sie können alle Fälle mit bekommen
if df.shape[0] == df.nunique()['ID']:
    print('ID-Spaltenwerte sind eindeutig')
else:
    print('ID-Spalte ist nicht eindeutig')

Holen Sie sich Zeilen mit doppelten beliebigen Spalten

#Bei Einbeziehung von NaN
print(df[df.duplicated(subset=['ID'])])
#ID Datum Start Ende
# 0   20.0  10/14   9:00  18:00
# 1   16.0  10/15  10:00  19:00
# 3    NaN  10/17  12:00  21:00
# 7    NaN  10/21  16:00  18:00
# 8   16.0  10/22  17:00  19:00
# 10  16.0  10/24  19:00  21:00
# 11  20.0  10/25  20:00  21:00

#Wenn NaN ausgeschlossen ist
df_dropna = df.dropna(subset=['ID'])
print(df_dropna[df_dropna.duplicated(subset=['ID'], keep=False)])
#ID Datum Start Ende
# 0   20.0  10/14   9:00  18:00
# 1   16.0  10/15  10:00  19:00
# 8   16.0  10/22  17:00  19:00
# 10  16.0  10/24  19:00  21:00
# 11  20.0  10/25  20:00  21:00

Recommended Posts

Probieren Sie verschiedene Zeilen aus, in denen eine Spalte in pandas.DataFrame eindeutig ist