如果pandas的DataFrame的总和小于x,则删除该列

Joe*_*len 5 python python-2.7 pandas

我正在尝试创建一个程序,如果列的总和小于10,将删除Panda的dataFrame中的列.

我目前有以下解决方案,但我很好奇是否有更多的pythonic方式来做到这一点.

df = pandas.DataFrame(AllData)
sum = df.sum(axis=1)
badCols = list()
for index in range(len(sum)):
    if sum[index]  < 10:
        badCols.append(index)
df = df.drop(df.columns[badCols], axis=1)
Run Code Online (Sandbox Code Playgroud)

在我的方法中,我创建了一个总和小于10的列索引列表,然后我删除了这个列表.这样做有更好的方法吗?

EdC*_*ica 12

您可以调用sum生成一个Series给出每列总和的值,然后使用它来生成针对列数组的布尔掩码,并使用它来过滤df.从@Alexander 借来的 DF代码:

In [2]:
df = pd.DataFrame({'a': [1, 10], 'b': [1, 1], 'c': [20, 30]})
df

Out[2]:
    a  b   c
0   1  1  20
1  10  1  30

In [3]:    
df.sum()

Out[3]:
a    11
b     2
c    50
dtype: int64

In [6]:
df[df.columns[df.sum()>10]]

Out[6]:
    a   c
0   1  20
1  10  30
Run Code Online (Sandbox Code Playgroud)


Ale*_*der 8

您可以使用列表理解iteritems来使用单行完成目标,并识别符合条件的所有列.

df = pd.DataFrame({'a': [1, 10], 'b': [1, 1], 'c': [20, 30]})
>>> df
    a  b   c
0   1  1  20
1  10  1  30

df.drop([col for col, val in df.sum().iteritems() if val < 10], axis=1, inplace=True)

>>> df
    a   c
0   1  20
1  10  30
Run Code Online (Sandbox Code Playgroud)