有条件地迭代Pandas中的列

时间:2015-11-19 15:10:48

标签: python pandas

我有一个Pandas数据框,我想在其中返回每列中唯一值的数量,但应排除某些列。

这就是我习惯于在列中选择唯一值的方法,但我不知道如何迭代它:

pd.unique(df.column_name.ravel())

我的想法是这样的,但显然无效。

col_names = list(df.columns.values)
dont_include = ['foo', 'bar']
cols_to_include = [x for x in col_names if x not in dont_include]
for i in cols_to_include:
 col_unique_count = len(pd.unique(df.i.ravel())

什么是最佳解决方案?

1 个答案:

答案 0 :(得分:2)

代码可以简化为:

cols_to_include = df.columns[~df.columns.str.contains('foo')]
for col in cols_to_include:
  col_unique_count = df[col].nunique()

您可以致电nunique获取给定系列的唯一值计数

或者:

cols_to_include = df.columns[~df.columns.str.contains('foo')]
df[cols_to_include].apply(pd.Series.nunique)

此处apply会在每列上调用nunique

修改

使用isin测试成员身份,使用~来取消布尔掩码:

In [47]:
df = pd.DataFrame(columns = ['foo','baz','bar','pie'])
df

Out[47]:
Empty DataFrame
Columns: [foo, baz, bar, pie]
Index: []

In [48]:
dont_include = ['foo', 'bar']
cols = df.columns[~df.columns.isin(dont_include)]
cols

Out[48]:
Index(['baz', 'pie'], dtype='object')

然后您可以像以前一样使用我的代码来迭代您的df的子选择