2017-02-23 262 views
2

我试图循环遍历由熊猫创建的数据帧,寻找每帧只出现一次的值。到目前为止我的代码如下:熊猫:从value_counts循环遍历数据帧

import pandas as pd 
df = pd.read_csv('xyz.csv') 
saved_column = df['S07'][df['Class'].isin(['GTD'])].round(decimals=1).value_counts() 

我如何遍历这个数据帧,检测只出现一次,最终所有的值从CSV文件删除?

非常感谢您的帮助!

一个例子是: (以CSV文件的输入数据)

In [2]: df 
Out[2]: Class S07 
     GTD 2.23 
     GTD 2.21 
     GTD 1.82 
     GTD 2.26 

我想要的代码来删除与GTD行 - 1.82,因为它的舍入值(1.8)仅在出现一次数据集。

样本数据集: https://1drv.ms/u/s!AvuwPSn7axNcePUsJD8kMB1FnlE

+3

您可以发布样本数据集和所需的数据集?请阅读[如何使良好的可重复熊猫示例](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) – MaxU

回答

0

您可以使用duplicated()方法:

In [86]: df 
Out[86]: 
    Class S07 
0 AAA 1.10 
1 AAA 1.11 
2 GTD 2.23 
3 GTD 2.21 
4 GTD 1.82 
5 GTD 2.26 

In [87]: x = df.loc[df.Class.isin(['GTD']), 'S07'].round(1).duplicated(keep=False) 

In [88]: df.loc[df.index[x.index][x]] 
Out[88]: 
    Class S07 
2 GTD 2.23 
3 GTD 2.21 

现在,您可以将结果保存到一个新的CSV文件:

df.loc[df.index[x.index][x]].to_csv('/path/to/file.csv', index=False, ...) 
+0

感谢您的快速回复。但是,我收到以下错误消息:提供了不可调整的布尔系列键。感谢您的耐心... – Phil

+0

@Phil,我已经更新了我的答案 - 请检查 – MaxU

+0

真棒,作品像魅力!谢谢! – Phil