遍历多个Pandas列并获取频率值

时间:2020-03-23 15:57:17

标签: python pandas

我遇到了这个问题,我需要遍历具有500列的pandas数据框,并获取其中一个值仅出现一次的列列表。

例如:

df2 = pd.DataFrame({'X': [1, 0, 0 , 0], 'Y': [1, 0, 0 , 1], 'Z': [1, 0, 1 , 1]})

我需要什么:

最小出现次数为1的列的列表,在这种情况下为X和Z 因为对于X,我们有1-1次和0 -3次,与Z相同,分别为1-3次和0-1次,所以X和Z的值只有一次。

我已经通过熊猫物品创建了一个迭代

for k in df2.columns:
    print(k)
    display(pd.DataFrame(df2[k].value_counts()))
    for p in df2[k].value_counts():
        #pd.DataFrame(df2[k].value_counts()).T.iterrows():
        #if z > 1:
        print("p",p)
        if p==1:
            print(k)

我已经测试了该解决方案,

df2['count'] = df2.groupby(['X', 'Y'], axis=1).cumcount() 

但是结果是按行的累计计数,不完全是我所需要的。

我尝试将其转换为Series,经过测试,然后转换为Pandas Dataframe,但是在第二个循环中如何迭代并选择值有些困难

谢谢您能提供帮助

1 个答案:

答案 0 :(得分:0)

根据给定的描述,这似乎可行:

[col for col in df2.columns if any(i==1 for i in df2[col].value_counts().values)]

['X', 'Z']

或者检查每列并打印是否符合条件:

for col in df2:
    print(any(i==1 for i in df2[col].value_counts().values))

True
False
True