相关疑难解决方法(0)

GroupBy pandas DataFrame并选择最常见的值

我有一个包含三个字符串列的数据框.我知道第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.我该怎么办呢?

python group-by mode pandas pandas-groupby

66
推荐指数
8
解决办法
6万
查看次数

Pandas:对于 groupby value_counts,返回具有最大计数的行

我想做与这个问题几乎相同的事情。

然而,根据我的数据集,@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),我想从返回的表中排除该最大值。

python pandas

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

pandas ×2

python ×2

group-by ×1

mode ×1

pandas-groupby ×1