熊猫:按一个

时间:2018-04-22 01:57:47

标签: python pandas dataframe

我有两列:df[upvotes]df[headline]。标题列包含带有标题字符串的行,而upvotes列只是包含整数的行。

使用pandas,我想找到标题中哪些字数最多可以引起最大投票。

这样做的最佳方式是什么?

到目前为止,我有这个,但是apply方法是将一个系列传递给x,所以显然我不明白它是如何工作的。

df.groupby('upvotes')['headline'].apply(lambda x: len(x.split(' '))).sort_index(ascending=False)

前5行数据:

   upvotes                                           headline                  
0        1  Software: Sadly we did adopt from the construc...                  
1        1   Google’s Stock Split Means More Control for L...                  
2        1  SSL DOS attack tool released exploiting negoti...                  
3       67       Immutability and Blocks Lambdas and Closures                  
4        1         Comment optimiser la vitesse de Wordpress?      

1 个答案:

答案 0 :(得分:2)

如果我了解您的问题,可以使用groupby.mean。如果您需要,可以用groupby.sum替换。

一般来说,尽可能避免lambda函数是个好主意。

df = pd.DataFrame({'upvotes': [1, 1, 1, 67, 1],
                   'headline': ['Software: Sadly we did adopt from the', 'Google’s Stock Split Means More Control for',
                                'SSL DOS attack tool released exploiting', 'Immutability and Blocks Lambdas and Closures',
                                'Comment optimiser la vitesse de Wordpress? ']})

df['wordcount'] = df['headline'].str.split().map(len)

df = df.groupby('wordcount', as_index=False)['upvotes'].mean()\
       .sort_values('upvotes', ascending=False)

print(df)

#    wordcount  upvotes
# 0          6       23
# 1          7        1