Панды: Любые () Все () с if / else

Этот ответ использует метод DataFrame.filter для этого без понимания списка:

import pandas as pd

data = {'spike-2': [1,2,3], 'hey spke': [4,5,6]}
df = pd.DataFrame(data)

print(df.filter(like='spike').columns)

Будет выводить только «spike-2». Вы также можете использовать регулярное выражение, как некоторые люди предложили в комментариях выше:

print(df.filter(regex='spike|spke').columns)

Выведет обе колонки: ['spike-2', 'hey spke']

0
задан natnay 16 January 2019 в 20:14
поделиться

2 ответа

Вам нужна маска:

# Set a default value
data['rwasted'] = data['republican'] - data['votestowin']
# Find where it is different
mask = data['democrat'] >= data['republican']
# Set those rows to another value
data['rwasted'][mask] = data['republican']

Нет необходимости в операторе if-else, нет для цикла, также необходимо. Вы должны думать по строкам и столбцам с DataFrames, а не по ячейкам.

0
ответ дан 9769953 16 January 2019 в 20:14
поделиться

.all() - это функция, которая применяется ко всему Series, а не к одному row. Вы смешиваете понятия здесь. Чтобы сделать построчное сравнение (как вы хотите):

myseries = []
for idx, row in data.iterrows():
    if row['democrat'] >= row['republican']:
        myseries.append(row['republican'])
    else:
        myseries.append(row['republican'] - row['votestowin'])

data['rwasted'] = pd.Series(myseries)

См. Ответ @ 9769953 для более краткого способа применения его в кадре данных, но это аналог вашего 114] подход

0
ответ дан C.Nivs 16 January 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: