Я хочу иметь возможность превратить группу в одну строку, но значения второго столбца в этой группе должны быть объединены в новые столбцы или -99, если данных недостаточно.
После того, как мы сгруппируем по session_id с этим вводом:
user_id session_id timestamp step impressions n_clicks
0 004A07DM0IDW 1d688ec168932 1541555799 7 2059240 5.0
1 004A07DM0IDW 1d688ec168932 1541555799 7 2033381 3.0
2 004A07DM0IDW 1d688ec168932 1541555799 7 1724779 4.0
3 004A07DM0IDW 1d688ec168932 1541555799 7 127131 2.0
4 004A07DM0IDW 1d688ec168932 1541555799 7 399441 1.0
5 004A07DM0IDW 1d688ec168932 1541555799 7 103357 3.0
6 004A07DM0IDW 1d688ec168932 1541555799 7 127132 3.0
7 004A07DM0IDW 1d688ec168932 1541555799 7 1167004 1.0
8 004A07DM0IDW 1d688ec168932 1541555799 7 4491766 4.0
9 004A07DM0IDW 1d688ec168932 1541555799 7 2249874 5.0
10 00Y1Z24X8084 26b6d294d66e7 1541651823 3 4476010 4.0
11 00Y1Z24X8084 26b6d294d66e7 1541651823 3 3843244 5.0
Я хотел бы произвести этот вывод
user_id session_id timestamp step count_0 count_1 count_2 count... count_24
0 004A07DM0IDW 1d688ec168932 1541555799 7 5.0 3.0 4.0 2.0 -99
1 00Y1Z24X8084 26b6d294d66e7 1541555799 3 4.0 5.0 -99 -99 -99
Мы хотим, чтобы user_id
session_id
timestamp
step
всегда были одинаковыми для каждой строки. Однако впечатления разные. Для каждой из строк (их будет не более 25) значение в столбце кликов сопоставляется с count_x
, однако, если количество строк недостаточно, последующие значения будут принимать -99.
Поскольку в первом кадре groupby 10 строк, это означает, что столбцы с count_10
по count_24
будут иметь значение -99. Для второго столбца groupby frame с count_2
по count_24
будет -99.
Использовать:
cols = ['user_id','session_id','timestamp','step']
df['g'] = df.groupby(cols).cumcount()
df = (df.set_index(cols + ['g'])['n_clicks']
.unstack(fill_value=-99)
.reindex(range(25), fill_value=-99, axis=1)
.add_prefix('count_')
.reset_index()
.rename_axis(None, axis=1))
print (df)
user_id session_id timestamp step count_0 count_1 count_2 \
0 004A07DM0IDW 1d688ec168932 1541555799 7 5.0 3.0 4.0
1 00Y1Z24X8084 26b6d294d66e7 1541651823 3 4.0 5.0 -99.0
count_3 count_4 count_5 ... count_15 count_16 count_17 count_18 \
0 2.0 1.0 3.0 ... -99 -99 -99 -99
1 -99.0 -99.0 -99.0 ... -99 -99 -99 -99
count_19 count_20 count_21 count_22 count_23 count_24
0 -99 -99 -99 -99 -99 -99
1 -99 -99 -99 -99 -99 -99
[2 rows x 29 columns]
Объяснение:
GroupBy.cumcount
для счетчикаDataFrame.set_index
и измените форму с помощью Series.unstack
range(25)
от DataFrame.reindex
DataFrame.add_prefix
DataFrame.rename_axis
с
DataFrame.reset_index