熊猫数据框最大按一列分组

时间:2019-12-23 06:18:05

标签: python pandas dataframe

我正在尝试按“关键字”列进行分组,以获取具有更多记录的特征。

让我们考虑一下熊猫df:

pd.DataFrame([['a', 'A'], ['b', 'A'], ['a', 'B'], ['b', 'B'], ['a', 'A'], ['c', 'B']], columns=['Keywords', 'Char'])

对于关键字a,特征A最频繁,对于关键字b来说A或B都可以,对于关键字c而言,B最频繁。

就我而言,我有10000个关键字和3个特征。作为回报,我希望有一个pd.Series,其关键词为索引,最频繁的特征为值,或者一本字典,以关键词为关键,最频繁的特征为值。

我尝试将关键字和特征分组,并按以下方式对行进行计数:

res = frame.groupby(['Keywords', 'Char']).size().reset_index().rename(columns={0:'records'})

但是我不知道如何获得对应于最大值的特征。

预期的输出(任何一个都可以):

pd.Series(data=['A', 'A', 'B'], index = ['a', 'b', 'c'])

pd.Series(data=['A', 'B', 'B'], index = ['a', 'b', 'c'])

{'a':'A', 'b':'A', 'c':'B'}

{'a':'A', 'b':'B', 'c':'B'}

1 个答案:

答案 0 :(得分:3)

Keywords中按组在lambda函数中使用Series.value_counts,并返回索引的第一个值。解决方案的想法是使用value_counts,因为默认情况下按计数对值进行排序:

res = frame.groupby('Keywords')['Char'].apply(lambda x: x.value_counts().index[0])
print (res)
Keywords
a    A
b    B
c    B
Name: Char, dtype: object