考虑这个 dataframe
df = pandas.DataFrame(numpy.random.randint(0,100,size=(200, 4)), columns=list('ABCD'))
df['E'] = list(numpy.arange(1001, 1021)) * 10
df['F'] = ['c', 'b', 'b', 'a', 'd'] * 20 + ['d', 'a', 'b', 'b', 'c'] * 20
Run Code Online (Sandbox Code Playgroud)
我想按列 'E' 分组,但我想聚合一些函数。例如sum来自 A、B、Dcount列和C 列的值。对于列“F”,我想在数组中获取唯一值。
所以我试过:
params = {
'A': 'sum',
'B': 'sum',
'C': 'count',
'D': 'sum',
'F': pandas.Series.unique
}
df_ = df.groupby('E').agg(params).reset_index()
Run Code Online (Sandbox Code Playgroud)
返回错误: Exception: Must produce aggregated value
我尝试了这段代码,因为在另一个例子中它有效。从那以后,我一直在尝试相同的方法来过滤不同的数据,但没有结果。
如果我使用pandas.Series.nunique或lambda x: x.nunique()它计算唯一值并且它工作正常。但是,如何使用 pandasaggregate方法获取唯一值?
为了完成这项工作,我编写了一个函数,其中 afor loop将列名作为参数。但是,我希望这可以有更好的方法。
我知道这个问题有很多答案,例如:如何使用多列中的值对pandas数据框进行排序?
我尝试了用户提供的解决方案,但我无法获得排序列.
我构建了一个DataFrame:
weekly = {'Tweet ID': Series(tweetID),
'Fecha de Publicación': Series(tweetDate),
'Tweet': Series(textStatus),
'Retweets': Series(retweetCount),
'Favoritos': Series(favoriteCount),
'Hashtags': Series(hashtags),
'Menciones': Series(mentions)}
weeklyAnalysis = DataFrame(weekly)
Run Code Online (Sandbox Code Playgroud)
然后我打电话给特定的推文:
maxTweets = weeklyAnalysis[['Tweet', 'Retweets']]
[weeklyAnalysis['Retweets'] >= promedioRts]
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的,为了对转推列进行排序:
maxTweets.sort_values(by=['Tweet', 'Retweets'], ascending=[False, True])
Run Code Online (Sandbox Code Playgroud)
我怎样才能真正对转推列进行排序.
任何建议表示赞赏!谢谢