我正在尝试按“关键字”列进行分组,以获取具有更多记录的特征。
让我们考虑一下熊猫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'}
答案 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