Как манипулировать структурой данных Python для индексации и / или поворота для двух столбцов? - PullRequest
0 голосов
/ 19 октября 2019

Примечание: код для следующего можно найти в моем github репозитории .

У меня есть фрейм данных Python, который я пытаюсь проиндексировать таким образом, чтобы я мог проверить клиентов в наборе данных user_id и их подписках id, чтобы затем выполнить базовые временные рядыанализ.

Я пытался создать сводные таблицы и различные индексации, но не могу заставить его работать. Как мне манипулировать df, чтобы позволить мне выполнять поиск и сегментировать на основе user_id (клиент), с которым связан только один id (подписка), и user_id (клиент), который имеет более одного id (подписка)? Или есть способ написать функцию для этого?

  1. groupby:
    data1.groupby('user_id').groups

вывод:

Int64Index([1507701], dtype='int64', name='id'),
 5404: Int64Index([1526753], dtype='int64', name='id'),
 7938: Int64Index([1489315], dtype='int64', name='id'),
 17951: Int64Index([1526391, 2050396, 2050416, 2050417, 2050418], dtype='int64', name='id'),
 19323: Int64Index([1447565, 1482407], dtype='int64', name='id'),
 19468: Int64Index([1490024], dtype='int64', name='id'),
 20407: Int64Index([1524039], dtype='int64', name='id'),
 30813: Int64Index([1537149], dtype='int64', name='id'),
 32786: Int64Index([1529058, 1529059, 1714909], dtype='int64', name='id'),
 33316: Int64Index([1528798], dtype='int64', name='id'),
 36867: Int64Index([1493735], dtype='int64', name='id'),
 42060: Int64Index([1607724], dtype='int64', name='id'),
 44155: Int64Index([1473383, 1474035, 1547023], dtype='int64', name='id'),
 49526: Int64Index([1493405], dtype='int64', name='id'),

Выше, кажется, идет по пути того, что я пытаюсьдля выполнения (например, 17951: Int64Index([1526391, 2050396, 2050416, 2050417, 2050418], dtype='int64', name='id'), показывает user_id с несколькими id)

Но как мне выполнить это на самом кадре данных? Или продолжать с этим, чтобы потом работать с этим? Я не уверен, как именно это сказать, извините: /

1 Ответ

1 голос
/ 19 октября 2019
# Creates table with each customer having a row for each unique subscription id
cust_sub_table = df.drop_duplicates(['user_id', 'id'])[['user_id', 'id']]

# Get number of subscriptions per customer
cust_sub_count = cust_sub_table.groupby(['user_id']).count().reset_index()

# Get customers with only one subscription
one_sub_cust = cust_sub_count.query('id == 1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...