我有一个系列,其中包含一些随机产品的列表。这是我打印描述时的样子:
<bound method NDFrame.describe of 176 reversible jacket
231 the north face resolve 2 jacket
234 columbia pike lake jacket
279 girl's 7-16 knitworks skater belted dress faux...
303 flocked quilted jacket
...
7665 tommy hilfiger big boys wayne colorblocked bas...
7685 men's toronto raptors columbia red flash forwa...
7796 the north face uo exclusive topography fanorak...
7809 lauren ralph lauren solid ultraflex classic-fi...
7922 tommy hilfiger sport faux-sherpa colorblocked ...
Name: desc, Length: 146, dtype: object>
<class 'pandas.core.series.Series'>
在这之后我有这两个陈述
max_occurence_prod = prod.where(prod.str.len() > 1)
curr_product = max_occurence_prod.value_counts().idxmax()
但是,每次我运行这段代码时,curr_product
的值似乎是不同的。例如,我第一次运行此代码时,curr_product
的值为“ diamond quilted packable jacket
”,第二次是“ boys' logan jacket
”
据我所知,value_counts()
函数应返回一个包含唯一值计数的Series。如果每次都以完全相同的方式返回该系列,那么idxmax()
是否也应该返回相同的对应值?我似乎无法弄清楚为什么每次都会返回不同的值。
这是整体代码
max_occurence_prod = prod.where(prod.str.len() > 1)
curr_product = max_occurence_prod.value_counts().idxmax()
#new value is printed each time
print(max_occurence_prod.value_counts().idxmax())
很抱歉,如果还不清楚,我是Python和Pandas的新手。
答案 0 :(得分:1)
似乎previous issues涉及value_counts()
熊猫如何以一种不一致的方式处理束缚的价值观。
对于idxmax()
,documentation明确指出:
如果多个值等于最大值,则返回具有该值的第一行标签。
恐怕您提供的信息量不足以让我用您的数据生成完整的示例,但这是一种尝试:
import pandas as pd
data = {'col_1':['a','a','b','b','c','c'],'col_2':['one','two','three','one','two','three']}
df = pd.DataFrame(data)
for i in range(3):
print(df['col_1'].value_counts().idxmax())
在命令中运行一次:
c
c
c
命令中的第二时间:
b
b
b
第三次:
a
a
a
结论是,由于value_counts()
而不是idxmax()
,每次获得的值都不同。使其始终可复制的一些解决方案是也使用sort_index()
,以使输出不依赖于随机值。例如:
for i in range(3):
print(df['col_1'].value_counts().sort_index().idxmax())
始终返回:
a
a
a