Слияние записей CSV по дате и подсчет записей по дате - PullRequest
2 голосов
/ 06 апреля 2019

У меня есть файл CSV, которым я использую Pandas DataFrame для манипуляции. У меня есть данные твитов, и я пытаюсь объединить ячейки в соответствии с датой, но также добавить дополнительный столбец, который отображает количество твитов за определенный день. Например:

Пример исходного кадра данных:

date        mentions    photos    replies    retweets    likes    polarity
2011-04-01     0          1         10          5          10        0.1
2011-04-01     1          1          5          3          20       -0.3
2011-04-02     2          0         15          2           5        0.5
2011-04-02     3          0          0          4         100       -0.5
2011-04-02     0          1          2          1          50        0.9
2011-04-03     1          1          1          2           2        0.2

Ожидаемый выходной кадр данных:

date      mentions    photos    replies    retweets    likes    polarity  counts
2011-04-01     1          2         15          8        30       -0.2       2
2011-04-02     5          1         17          7       155        0.9       3   
2011-04-03     1          1          1          2         2        0.2       1

Обычно я использовал бы pd.DataFrame().groupby(['date']).sum(), и он объединял бы ячейки в соответствии с датой, а также суммировал значения других столбцов, но теперь я хотел бы добавить дополнительный столбец справа, считая количество твитов. Я надеюсь, что я достаточно ясно, но если нет, пожалуйста, дайте мне знать.

Есть ли встроенная библиотека, которая позаботится об этом, или мне придется кодировать ее вручную?

Спасибо.

1 Ответ

1 голос
/ 06 апреля 2019

Проще всего добавить новый столбец, созданный DataFrame.assign и Series.value_counts:

df = df.groupby('date').sum().assign(counts=df['date'].value_counts())
print (df)
            mentions  photos  replies  retweets  likes  polarity  counts
date                                                                    
2011-04-01         1       2       15         8     30      -0.2       2
2011-04-02         5       1       17         7    155       0.9       3
2011-04-03         1       1        1         2      2       0.2       1

Общее решение - создать словарь для совокупности с dict.fromkeysпо всем столбцам без date - можно использовать для агрегата size, но нужен последний rename это:

d = dict.fromkeys(df.columns.difference(['date']), 'sum')
d['date'] = 'size'
df = df.groupby('date').agg(d).rename(columns={'date':'counts'})
print (df)
            likes  mentions  photos  polarity  replies  retweets  counts
date                                                                    
2011-04-01     30         1       2      -0.2       15         8       2
2011-04-02    155         5       1       0.9       17         7       3
2011-04-03      2         1       1       0.2        1         2       1

Detail :

print (d)
{'likes': 'sum', 'mentions': 'sum', 'photos': 'sum', 'polarity': 'sum', 
 'replies': 'sum', 'retweets': 'sum', 'date': 'size'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...