Python DataFrame подсчитывает, сколько разных элементов - PullRequest
0 голосов
/ 05 марта 2020

Мне нужно посчитать, сколько разных элементов в моем DataFrame (df).

У моего df есть день месяца (как число: 1,2,3 ... 31), в котором измерялась определенная переменная. Есть 3 столбца, которые описывают номер дня. Есть несколько измерений за один день, поэтому мои столбцы имеют повторные значения. Мне нужно знать, сколько дней в месяце измеряла эта переменная, игнорируя, сколько раз в день проводилось это измерение. Поэтому я подумал, что считая дни, игнорируя повторяющиеся значения.

В качестве примера данные моего df будут выглядеть так:

col1 col2 col3   
 2    2   2
 2    2   3
 3    3   3
 3    4   8

Мне нужен вывод, который говорит мне, что в этом DataFrame: номера 2, 3, 4 и 8.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 06 марта 2020

Просто сделайте:

df=pd.DataFrame({"col1": [2,2,3,3], "col2": [2,2,3,4], "col3": [2,3,3,8]})

df.stack().unique()

Выходы:

[2 3 4 8]
1 голос
/ 06 марта 2020

Или вы можете использовать numpy, чтобы получить уникальные значения в кадре данных:

import pandas as pd
import numpy as np

df = pd.DataFrame({'X' : [2, 2, 3, 3], 'Y' : [2,2,3,4], 'Z' : [2,3,3,8]})

df_unique = np.unique(np.array(df))

print(df_unique) 
#Output [2 3 4 8]
#for the count of days:
print(len(df_unique))
#Output 4
1 голос
/ 06 марта 2020

Вы можете использовать функцию drop_duplicates в вашем фрейме данных, например:

import pandas as pd
df = pd.DataFrame({'a':[2,2,3], 'b':[2,2,3], 'c':[2,2,3]})

   a  b  c
0  2  2  2
1  2  2  2
2  3  3  3

df = df.drop_duplicates()
print(df['a'].count())
out: 2
0 голосов
/ 06 марта 2020

Вы можете использовать pandas.unique() примерно так:

pd.unique(df.to_numpy().flatten())

Я провел некоторые базовые тесты c, этот метод кажется самым быстрым.

0 голосов
/ 06 марта 2020

Как насчет:

Если предположить, что это ваш начальный df:

   col1  col2  col3
0     2     2     2
1     2     2     2
2     3     3     3

Тогда:

count_df = pd.DataFrame()

for i in df.columns:
    df2 = df[i].value_counts()
    count_df = pd.concat([count_df, df2], axis=1)

final_df = count_df.sum(axis=1)
final_df = pd.DataFrame(data=final_df, columns=['Occurrences'])
print(final_df)

   Occurrences
2            6
3            3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...