Панды Добавить результат сравнения столбцов - PullRequest
0 голосов
/ 17 декабря 2018

Как добавить столбец сравнения (т.е. для lead) в мой фрейм данных для каждой строки во фрейме данных.Он должен взять среднее значение в столбце (общее среднее значение) и вычесть его среднемесячное значение.Можно ли это сделать с помощью apply и лямбда, используя groupby?

То есть, как я могу создать дополнительный столбец сравнения, Lead_Diff, то есть разницу между элементами строки "ежемесячное среднее чтение" и ее средним значением по столбцу.Ниже приведен макет моих данных, заранее спасибо.

info = {'date': ['01-18', '02-18', '03-18', '01-18','02-18','01-18','03-18'], 
        'lead': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6,0.7],
        'copper': [0.7, 0.6, 0.5, 0.4, 0.3, .2, 0.1]}

df = pd.DataFrame.from_dict(info)

1 Ответ

0 голосов
/ 17 декабря 2018

Я полагаю, вам нужно transform для mean в новом Series с таким же размером, как у оригинала DataFrame и вычитать mean столбца:

df['mean'] = df.groupby('date')['lead'].transform('mean') - df['lead'].mean()
print (df)
    date  lead  copper      mean
0  01-18   0.1     0.7 -0.033333
1  02-18   0.2     0.6 -0.050000
2  03-18   0.3     0.5  0.100000
3  01-18   0.4     0.4 -0.033333
4  02-18   0.5     0.3 -0.050000
5  01-18   0.6     0.2 -0.033333
6  03-18   0.7     0.1  0.100000

Если годы не важны и нужно работать только с месяцами:

#changed data
info = {'date': ['01-18', '03-17', '03-18', '01-18','03-17','01-17','03-17'], 
    'lead': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6,0.7],
    'copper': [0.7, 0.6, 0.5, 0.4, 0.3, .2, 0.1]}
df = pd.DataFrame.from_dict(info)

df['date'] = pd.to_datetime(df['date'], format='%m-%y')
df['mean'] = df.groupby(df['date'].dt.month)['lead'].transform('mean') - df['lead'].mean()
print (df)
        date  lead  copper      mean
0 2018-01-01   0.1     0.7 -0.033333
1 2017-03-01   0.2     0.6  0.025000
2 2018-03-01   0.3     0.5  0.025000
3 2018-01-01   0.4     0.4 -0.033333
4 2017-03-01   0.5     0.3  0.025000
5 2017-01-01   0.6     0.2 -0.033333
6 2017-03-01   0.7     0.1  0.025000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...