#python #python-2.7 #pandas
#python #python-2.7 #pandas
Вопрос:
Мне было интересно, как я могу удалить все индексы, содержащие отрицательные значения внутри их столбца. Я использую Pandas DataFrames
.
Формат:
Myid — valuecol1 — valuecol2 — valuecol3 -… valuecol30
Итак, мой DataFrame
называется data
Я знаю, как это сделать для 1 столбца:
data2 = data.index[data['valuecol1'] > 0]
data3 = data.ix[data3]
Итак, я получаю только идентификаторы, где valuecol1 > 0
, как я могу сделать какое-то and
утверждение?
valuecol1 amp;amp; valuecol2 amp;amp; valuecol3 amp;amp; ... amp;amp; valuecol30 > 0
?
Комментарии:
1. что делать, если я хочу получить список имен учащихся с отрицательным результатом.
2. @NipulSindwani Попробуйте
df[df["score"] < 0]["name"]
, но в целом, пожалуйста, отправьте новый вопрос, если у вас есть новый вопрос.
Ответ №1:
Вы можете использовать all
для проверки истинности всей строки или столбца:
In [11]: df = pd.DataFrame(np.random.randn(10, 3))
In [12]: df
Out[12]:
0 1 2
0 -1.003735 0.792479 0.787538
1 -2.056750 -1.508980 0.676378
2 1.355528 0.307063 0.369505
3 1.201093 0.994041 -1.169323
4 -0.305359 0.044360 -0.085346
5 -0.684149 -0.482129 -0.598155
6 1.795011 1.231198 -0.465683
7 -0.632216 -0.075575 0.812735
8 -0.479523 -1.900072 -0.966430
9 -1.441645 -1.189408 1.338681
In [13]: (df > 0).all(1)
Out[13]:
0 False
1 False
2 True
3 False
4 False
5 False
6 False
7 False
8 False
9 False
dtype: bool
In [14]: df[(df > 0).all(1)]
Out[14]:
0 1 2
2 1.355528 0.307063 0.369505
Если вы хотите просмотреть только подмножество столбцов, например [0, 1]
:
In [15]: df[(df[[0, 1]] > 0).all(1)]
Out[15]:
0 1 2
2 1.355528 0.307063 0.369505
3 1.201093 0.994041 -1.169323
6 1.795011 1.231198 -0.465683
Ответ №2:
Вы можете перебирать имена столбцов
for cols in data.columns.tolist()[1:]:
data = data.ix[data[cols] > 0]
Ответ №3:
Чтобы использовать операторы and внутри фрейма данных, вам просто нужно использовать один символ amp; и отделять каждое условие круглыми скобками.
Например:
data = data[(data['col1']>0) amp; (data['valuecol2']>0) amp; (data['valuecol3']>0)]
Ответ №4:
Если вы хотите проверить значения смежной группы столбцов, например, со второго по десятый:
df[(df.ix[:,2:10] > 0).all(1)]
Вы также можете использовать диапазон
df[(df.ix[:,range(1,10,3)] > 0).all(1)]
и собственный список индексов
mylist=[1,2,4,8]
df[(df.ix[:, mylist] > 0).all(1)]