我遇到了这个问题,我需要遍历具有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,但是在第二个循环中如何迭代并选择值有些困难
谢谢您能提供帮助
答案 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