2016-11-11 4 views
0

У меня есть кадр данных с столбцом заработной платы, который определяет почасовую зарплату и столбец объединения, который указывает, является ли сотрудник в союзе. Существуют и другие переменные, но сейчас они не имеют значения. Я пытаюсь найти среднюю заработную плату для сотрудников в профсоюзе. Я написал код, который предоставляет список True/False, является ли сотрудник членом профсоюза. Однако я не знаю, как применять этот список, чтобы получить среднюю заработную плату. Заранее благодарю за любую помощь.Python Pandas DataFrame Control Flow

#Read cps.csv file 
import pandas as pd 
cps_df = pd.read_csv('cps.csv') 
cps_df 

#Function to determine whether or not an employee is in a union 
def hourly_wage(x): 
""" return true if union else false """ 

if x['union'] == 'Union': 
    return True 
else: 
    return False 

#Function to create a list of union vs non-union 
def union_list(y): 
    """ return a list determining union vs non-union """ 

    return [hourly_wage(x) for index, x in y.iterrows()] 

#Print list 
%time 
print(union_list(cps_df)) 
+0

Возможно, мне что-то не хватает, но почему бы не 'cps_df [cps_df ['' union '] ==' Union '] [' wage ']. Mean()'? – iayork

+0

Я должен создать кадр данных pandas и вычислить среднюю почасовую заработную плату профсоюзного работника, используя поток управления для итерации по каждой строке кадра данных. Поэтому я предполагаю, что мне нужно настроить это так. Я ошибаюсь? –

ответ

0

Я полагаю, вы можете сделать это более удобным способом. Панда отлично подходит для таких вещей.

Предположим, что столбец заработной платы - это «заработная плата». Тогда код будет выглядеть следующим образом:

import pandas as pd 
cps_df = pd.read_csv('cps.csv') 
print('Union workers mean wage: ', cps_df[cps_df.union == 'Union'].wage.mean()) 

Что по существу делает: 1. Выбор всех работников профсоюза (cps_df [cps_df.union == 'Союз']) 2. Aplies среднее() функция их заработной платы (.wage.mean())

Надеюсь, это поможет.

+0

Большое спасибо за ответ. Я знаю, что есть определенно более упрощенные способы получить среднее значение. Однако я должен использовать этот процесс. Кроме того, мне нужно будет знать, как это сделать для более сложных сценариев. –

+0

Итак, я думаю, что это большая проблема с данными. Почему вы не собираете заработную плату, а затем используете функцию индикатора hourly_wage (x)? –

+0

Я имею в виду что-то вроде этого: Защиту union_wage_list (у): «» «возвращает список заработной платы определения профсоюза работников„“» возвращение [х [ „заработной платы“] для индекса х в y.iterrows() если hourly_wage (x)] –