如何计算熊猫数据框中每一列的唯一性?
Posted
技术标签:
【中文标题】如何计算熊猫数据框中每一列的唯一性?【英文标题】:How to count uniques for each column in a pandas dataframe? 【发布时间】:2018-06-10 06:18:42 【问题描述】:我在下面有一个代码,它在我的数据框的每一列中创建一个缺失值的汇总表。我希望我可以建立一个类似的表来计算唯一值,但是 DataFrame 没有 unique() 方法,只有每列独立。
def missing_values_table(df):
mis_val = df.isnull().sum()
mis_val_percent = 100 * df.isnull().sum()/len(df)
mis_val_table = pd.concat([mis_val, mis_val_percent], axis=1)
mis_val_table_ren_columns = mis_val_table.rename(
columns = 0 : 'Missing Values', 1 : '% of Total Values')
return mis_val_table_ren_columns
(来源:https://***.com/a/39734251/7044473)
我怎样才能为唯一值完成相同的操作?
【问题讨论】:
【参考方案1】:您可以使用名为 'nunique()' 的函数来获取所有列的唯一计数
df = pd.DataFrame(np.random.randint(0, 3, (4, 3)))
print(df)
0 1 2
0 2 0 2
1 1 2 1
2 1 2 2
3 1 1 2
count=df.nunique()
print(count)
0 2
1 3
2 2
dtype: int64
【讨论】:
【参考方案2】:您可以使用pd.unique
函数创建一系列唯一值计数。例如:
>>> df = pd.DataFrame(np.random.randint(0, 3, (4, 3)))
>>> print(df)
0 1 2
0 2 0 2
1 1 2 1
2 1 2 2
3 1 1 2
>>> pd.Series(col: len(pd.unique(df[col])) for col in df)
0 2
1 3
2 2
dtype: int64
如果你真的想要每个值在每一列中出现的次数,你可以用pd.value_counts
做类似的事情:
>>> pd.DataFrame(col: pd.value_counts(df[col]) for col in df).fillna(0)
0 1 2
0 0.0 1 0.0
1 3.0 1 1.0
2 1.0 2 3.0
【讨论】:
【参考方案3】:这不完全符合您的要求,但可能对您的分析有用。
def diversity_percentage(df, columns):
"""
This function returns the number of different elements in each column as a percentage of the total elements in the group.
A low value indicates there are many repeated elements.
Example 1: a value of 0 indicates all values are the same.
Example 2: a value of 100 indicates all values are different.
"""
diversity = dict()
for col in columns:
diversity[col] = len(df[col].unique())
diversity_series = pd.Series(diversity)
return (100*diversity_series/len(df)).sort_values()
__
>>> diversity_percentage(df, selected_columns)
operationdate 0.002803
payment 1.076414
description 16.933901
customer_id 17.536581
customer_name 48.895554
customer_email 62.129282
token 68.290632
id 100.000000
transactionid 100.000000
dtype: float64
但是,您始终可以直接返回 diversity_series,并且只会获得计数。
【讨论】:
谢谢,非常方便。探索新数据集时,我总是检查“多样性”以上是关于如何计算熊猫数据框中每一列的唯一性?的主要内容,如果未能解决你的问题,请参考以下文章