我有一个包含三个字符串列的数据框.我知道第3列中唯一的一个值对前两个的每个组合都有效.要清理数据,我必须按数据框前两列进行分组,并为每个组合选择第三列的最常见值.
我的代码:
import pandas as pd
from scipy import stats
source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'],
'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
'Short name' : ['NY','New','Spb','NY']})
print source.groupby(['Country','City']).agg(lambda x: stats.mode(x['Short name'])[0])
Run Code Online (Sandbox Code Playgroud)
最后一行代码不起作用,它说"键错误'短名称'",如果我尝试仅按城市分组,那么我得到一个AssertionError.我该怎么办呢?
我想做与这个问题几乎相同的事情。
然而,根据我的数据集,@jezrael 接受的答案中的方法花费的时间太长——原始数据框中有大约 300k 行,并且运行 nlargest(1) 命令需要几分钟。此外,我在 head(1000) 有限的数据帧上进行了尝试,并且在 value_count 中并没有只获得 1 行——我得到了与 value_count 完全相同的系列。
用我自己的话说:基本上,我的数据集有两列,如下所示:
Session Rating
A Positive
A Positive
A Positive
A Negative
B Negative
B Negative
C Positive
C Negative
Run Code Online (Sandbox Code Playgroud)
使用 counts = df.groupby('Session')['Rating'].value_counts() 我得到一个像这样的 Series 对象:
Session Rating
A Positive 3
Negative 1
B Negative 2
C Positive 1
Negative 1
Run Code Online (Sandbox Code Playgroud)
如何获取仅包含最大计数评级的数据框?如果有多个最大值(例如 C),我想从返回的表中排除该最大值。