使用dataframe.apply在每列

时间:2018-01-23 19:48:20

标签: python pandas dataframe unique apply

我一直想做以下工作,以便在pandas.DataFrame.someColumnName.unique()内的每一列上执行pandas.DataFrame函数的简单故事。

df.apply(func=unique, axis=0)  # error NameError: name 'unique' is not defined

是否有一些技巧我忽视了这个工作或替代解决方案,给出了类似的操作,但在type()的每一列上使用pandas.DataFrame函数。

df.apply(func=lambda x: type(x[0]), axis=0)

请注意,我已经能够进行以下工作,但似乎不是python中的单行for循环方式,我发现apply语句是一个更好的自我记录实现。

for col in df.columns: 
    df[col].unique()

2 个答案:

答案 0 :(得分:6)

unique不是全局环境中的注册函数,您可以使用set来实现此目的:

df.apply(set)

或者如果使用unique,请从pandas引用它,您也最好将结果转换为列表,因为不能保证所有列都包含相同数量的唯一元素:

df.apply(lambda x: pd.unique(x).tolist())

答案 1 :(得分:3)

如果您需要单线圈,您可以:

mydf<-matrix(sample(c(0,1,2),6*8,replace = T),ncol=8)
mismatches<-matrix(sample(c(T,F,NA),6*8,replace = T),ncol=8)
mydf<-mydf != 1

> (mydf+mismatches) == 2
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]
[1,]    NA    NA FALSE FALSE    NA FALSE  TRUE FALSE
[2,] FALSE    NA FALSE  TRUE  TRUE    NA FALSE FALSE
[3,]  TRUE    NA    NA FALSE FALSE  TRUE FALSE FALSE
[4,] FALSE FALSE FALSE    NA    NA    NA FALSE    NA
[5,]    NA FALSE FALSE    NA    NA FALSE  TRUE  TRUE
[6,] FALSE FALSE  TRUE FALSE    NA  TRUE FALSE  TRUE