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)
您可以使用列表理解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)
| 归档时间: |
|
| 查看次数: |
5279 次 |
| 最近记录: |