我有一个使用Pandas DataFrame进行操作的CSV文件。我拥有的数据是Tweet数据,我想做的是根据日期合并单元格,还添加了一个额外的列,该列显示特定日期有多少Tweets。例如:
原始数据帧示例:
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的数量。我希望我已经足够清楚了,但是如果没有,请告诉我。
是否有内置的库功能可以解决此问题,还是我必须手动对其进行编码?
谢谢。
答案 0 :(得分:1)
最简单的方法是添加由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
使用它:< / p>
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'}