Pandas从数据帧返回字符串值count()函数

时间:2016-12-09 13:58:17

标签: python-3.x pandas dataframe count max

学习熊猫并与更简单的东西挣扎..提前感谢您的帮助。

最终我希望我的代码只返回' oranges'因为COLOR列中出现的值最多。

我的索引目前是x列。

X    FRUIT   COLOR
10  apples  green
10  apples  red
10  oranges green
10  oranges orange
10  oranges yellow
10  bananas yellow
10  bananas green

我似乎总是返回一个键值对或只返回.count()数字,并且似乎不会从聚合结果中提取FRUIT列值。

这是我的一个代码示例试图解决它 - 我尝试了很多,但这是最新的一个不起作用:

df['COUNT'] = df.groupby(['FRUIT'])['FRUIT'].transform('SIZE')
copy_df = df
max = copy_df.loc[df['SIZE'] == copy_df['SIZE'].max()]
print(max)

这将返回" AttributeError:' SeriesGroupBy'对象没有属性' SIZE'" - 我有其他尝试有更好的结果,但我可以告诉我问题并没有得到任何快速....再次感谢帮助这个新手!

1 个答案:

答案 0 :(得分:1)

我认为您需要在SIZE中将size更改为transform

df['SIZE'] = df.groupby(['FRUIT'])['FRUIT'].transform('size')

max1 = df.loc[df['SIZE'] == df['SIZE'].max()]
print(max1)
    X    FRUIT   COLOR  SIZE
2  10  oranges   green     3
3  10  oranges  orange     3
4  10  oranges  yellow     3

如果需要列FRUIT的最高值,请使用value_counts,然后使用index[0]的第一个索引值,因为输出已排序:

print (df.FRUIT.value_counts())
oranges    3
apples     2
bananas    2
Name: FRUIT, dtype: int64

val  = df.FRUIT.value_counts().index[0]
print (val)
oranges

另一个使用sizeidxmax进行聚合的解决方案,用于检查Series的最大值的索引值:

print (df.groupby('FRUIT')['FRUIT'].size())
FRUIT
apples     2
bananas    2
oranges    3
dtype: int64

val = df.groupby('FRUIT')['FRUIT'].size().idxmax()
print (val)
oranges