Pandas Dataframe - 使用比较运算符 (==) 与 idxmin() 产生不同的结果

这与试图回答的问题之一有关。工号:61801654


数据集:


Q   GDP

2008q3  14891.6 

2008q4  14577.0 

2009q1  14375.0 

2009q2  14355.6

这个想法是为了获得 GDP 的最小值的 Q 值。正确答案是:


df.loc[df['GDP'].idxmin()]['Q']

输出:


2009q2

<class 'str'>

我认为也可能是答案是这样的:


df.loc[df['GDP'] == df['GDP'].min()]['Q']

但是,输出是:


3    2009q2

<class 'pandas.core.series.Series'>

作为参考,3 是我使用 read_clipboard(sep='\s\s+') 函数创建的数据帧的索引:


df = pd.read_clipboard(sep='\s\s+')


        Q      GDP

0  2008q3  14891.6

1  2008q4  14577.0

2  2009q1  14375.0

3  2009q2  14355.6

我想了解为什么df.loc[df['GDP'] == df['GDP'].min()]['Q']返回一个系列而df.loc[df['GDP'].idxmin()]['Q']只返回一个字符串值。


找不到已经回答过的类似问题。如果重复,我深表歉意。


明月笑刀无情
浏览 88回答 1
1回答

翻阅古今

场景 1df['GDP'] == df['GDP'].min()给你一个布尔系列。>>> mask = df['GDP'] == df['GDP'].min()>>> mask0&nbsp; &nbsp; False1&nbsp; &nbsp; False2&nbsp; &nbsp; False3&nbsp; &nbsp; &nbsp;TrueName: GDP, dtype: bool使用布尔系列(带或不带loc访问器)索引到数据帧中会为您提供数据帧。>>> df_filtered = df.loc[mask]>>> type(result1)<class 'pandas.core.frame.DataFrame'>>>> df_filtered&nbsp; &nbsp; &nbsp; &nbsp; Q&nbsp; &nbsp; &nbsp; GDP3&nbsp; 2009q2&nbsp; 14355.6从数据框中选择一列会给你一个系列。>>> type(df_filtered['Q'])<class 'pandas.core.series.Series'>>>> df_filtered['Q']3&nbsp; &nbsp; 2009q2Name: Q, dtype: object场景 2df['GDP'].idxmin()给你一个单一的价值。>>> idxmin = df['GDP'].idxmin()>>> idxmin3选择数据框的单行返回一个系列。>>> row = df.loc[idxmin]>>> type(row)<class 'pandas.core.series.Series'>>>> rowQ&nbsp; &nbsp; &nbsp; &nbsp;2009q2GDP&nbsp; &nbsp; 14355.6Name: 3, dtype: object索引到一个系列会给你一个单一的价值(如果索引是唯一的)。>>> row['Q']'2009q2'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python