Как я могу применить функцию к фрейму данных, который нуждается в индексе строки в Pandas? - PullRequest
0 голосов
/ 28 сентября 2018

Я должен использовать данные опроса ipums, чтобы получить среднее число безработных в два последовательных периода.Я написал функцию, которая использует индекс и фрейм данных в качестве входных данных,

def u1(x,df):
if df.loc[x]['LABFORCE']==2 and df.loc[x]['CPSIDP']==df.loc[x+1]['CPSIDP']:
    if df.loc[x]['EMPSTAT']==21 or df.loc[x]['EMPSTAT']==22:
        return True
else: 
    return False

, где x - индекс, а df - фрейм данных.CPSIDP идентифицирует респондента, LABFORCE проверяет, находится ли респондент в рабочей силе, а EMPSTAT - это то, что мне нужно использовать для проверки статуса занятости респондента.

А затем я планировал использоватьapply as

result= df.apply(u1, axis=1)

Не ясно, какие аргументы я должен передать в своей функции (и, пожалуйста, дайте мне знать, если этот подход просто философски неверен).Передача числа или переменной для индекса дает мне объект 'bool' - не вызываемая ошибка.

Наименьшее подмножество данных, которое генерирует ошибку (самый левый столбец - номер наблюдения, это x, который мне нужно пройти через u1):

          YEAR  MONTH          CPSIDP  EMPSTAT  LABFORCE
15285896  2018      7  20180707096701       10         2
15285926  2018      7  20180707098301       10         2
15285927  2018      7  20180707098302       10         2
15285928  2018      7  20180707098303        0         0
15285929  2018      7  20180707098304        0         0
15285930  2018      7  20180707098305       10         2
15286095  2018      7  20180707108203       21         2

1 Ответ

0 голосов
/ 29 сентября 2018

IIUC было бы эффективнее создать boolean Series, используя логику из вашей функции.

Здесь & - это оператор AND.

result = (df['LABFORCE'].eq(2) & 
           df['CPSIDP'].eq(df['CPSIDP'].shift()) & 
           df['EMPSTAT'].isin([21,22]))

result

15285896    False
15285926    False
15285927    False
15285928    False
15285929    False
15285930    False
15286095    False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...