代码之家  ›  专栏  ›  技术社区  ›  Sean

按日期合并CSV条目并按日期计数条目

  •  2
  • Sean  · 技术社区  · 7 年前

    原始数据帧示例:

    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() 它将根据日期合并单元格,并对其他列的值进行汇总,但现在我想在右边添加一个额外的列来计算Tweets的数量。我希望我说得够清楚了,如果不清楚请告诉我。

    是否有一个内置的库功能来处理这个问题,或者我需要手动编写代码吗?

    谢谢您。

    1 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    最简单的是添加由 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
    

    细节

    print (d)
    {'likes': 'sum', 'mentions': 'sum', 'photos': 'sum', 'polarity': 'sum', 
     'replies': 'sum', 'retweets': 'sum', 'date': 'size'}