Как разрезать столбец на две ячейки и объединять данные для каждой ячейки с помощью группировки? - PullRequest
1 голос
/ 09 июля 2019

Итак, это мой фрейм данных.

session_id  question_difficulty     attempt_updated_at
5c822af21c1fba22            2   1557470128000
5c822af21c1fba22            3   1557469685000
5c822af21c1fba22            4   1557470079000
5c822af21c1fba22            5   1557472999000
5c822af21c1fba22            3   1557474145000
5c822af21c1fba22            3   1557474441000
5c822af21c1fba22            4   1557474299000
5c822af21c1fba22            4   1557474738000
5c822af21c1fba22            3   1557475430000
5c822af21c1fba22            4   1557476960000
5c822af21c1fba22            5   1557477458000
5c822af21c1fba22            2   1557478118000
5c822af21c1fba22            5   1557482556000
5c822af21c1fba22            4   1557482809000
5c822af21c1fba22            5   1557482886000
5c822af21c1fba22            5   1557484232000

Я хочу разделить поле 'try_updated_at' (, которое является временем эпохи ) на 2 равных ячейки и найти среднее значение 'question_difficulty'в этом бине за сеанс.

Я хочу сохранить среднее значение 1-го и 2-го бинов отдельно.

Я пытался пройти через pd.cut, но я не знаю, как его использовать.

Я ожидаю, что мой результат будет примерно таким,

, например,

session_id         mean1_difficulty       mean2_difficulty
5c822af21c1fba22            5.0                3.0

Любая идея приветствуется, Спасибо.

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Я считаю, что вам нужно qcut с совокупностью mean:

df1 = (df.groupby(['session_id', pd.qcut(df['attempt_updated_at'], 2, labels=False)])
         ['question_difficulty'].mean()
                                .unstack()
                                .rename(columns=lambda x: f'mean{x+1}_difficulty'))
print (df1)
attempt_updated_at  mean1_difficulty  mean2_difficulty
session_id                                            
5c822af21c1fba22                 3.5             4.125

Или cut:

df1 = (df.groupby(['session_id', pd.cut(df['attempt_updated_at'], 2, labels=False)])
         ['question_difficulty'].mean()
                                .unstack()
                                .rename(columns=lambda x: f'mean{x+1}_difficulty'))
print (df1)
attempt_updated_at  mean1_difficulty  mean2_difficulty
session_id                                            
5c822af21c1fba22            3.444444          4.285714

Разницу между функциями лучше объяснить здесь .

1 голос
/ 09 июля 2019

Я думаю, что должен это сделать:

pdf.sort_values('attempt_updated_at', ascending=False, inplace=True).reset_index(drop=True)
first = pdf.iloc[:pdf.shape[0] // 2]
second = pdf.iloc[pdf.shape[0] // 2:]

res = pd.DataFrame(first.groupby('session_id')['question_difficulty'].agg('mean')) \
    .rename(columns={'question_difficulty': 'mean1_difficulty'}) \
    .join(second.groupby('session_id')['question_difficulty'].agg('mean')) \
    .rename(columns={'question_difficulty': 'mean2_difficulty'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...