如果某个特定列的总计数只出现一次,我希望删除数据帧中的行
原始表格示例(为便于说明,数值是任意的):
print df
Country Series Value
0 Bolivia Population 123
1 Kenya Population 1234
2 Ukraine Population 12345
3 US Population 123456
5 Bolivia GDP 23456
6 Kenya GDP 234567
7 Ukraine GDP 2345678
8 US GDP 23456789
9 Bolivia #McDonalds 3456
10 Kenya #Schools 3455
11 Ukraine #Cars 3456
12 US #Tshirts 3456789
预期结果:
^{pr2}$我知道df.Series.value_counts()>1
将标识出哪个{
Population
True
GDP
True
#McDonalds
False
#Schools
False
#Cars
False
#Tshirts
False
我想写一些类似下面的东西,这样我的新DataFrame将列值从数据框系列只发生一次,但这不起作用:
df.drop(df.Series.value_counts()==1,axis=1,inplace=True)
这是一个老问题,但当前的答案不适用于任何中等规模的数据帧。一种更快、更“dataframe”的方法是添加一个value count列并过滤掉count。在
创建数据集:
删除列(在本例中为“Series”)的计数为1的行:
^{pr2}$您可以通过列表理解或使用
DataFrame
的字符串操作方法来创建布尔列表/数组。在列表理解方法是:
另一种方法是使用
^{pr2}$str.contains
方法检查Series
列的值是否包含给定的字符串或匹配给定的正则表达式(在本例中使用多个字符串时使用):使用这种正则表达式方法有点老套,可能需要对
pat
进行一些额外的处理(字符转义等),以防在要筛选出的字符串中有正则表达式元字符(这需要一些基本的正则表达式知识)。然而,值得注意的是,这种方法比使用列表理解方法快4倍(根据问题中提供的数据进行了测试)。在作为补充说明,我建议避免使用单词
Series
作为列名,因为这是pandas对象的名称。在相关问题 更多 >
编程相关推荐