为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2022-11-18 18:23:12
这与试图回答的问题之一有关。工号:61801654数据集:Q   GDP2008q3  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      GDP0  2008q3  14891.61  2008q4  14577.02  2009q1  14375.03  2009q2  14355.6我想了解为什么df.loc[df['GDP'] == df['GDP'].min()]['Q']返回一个系列而df.loc[df['GDP'].idxmin()]['Q']只返回一个字符串值。找不到已经回答过的类似问题。如果重复,我深表歉意。
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

场景 1

df['GDP'] == df['GDP'].min()给你一个布尔系列。


>>> mask = df['GDP'] == df['GDP'].min()

>>> mask

0    False

1    False

2    False

3     True

Name: GDP, dtype: bool

使用布尔系列(带或不带loc访问器)索引到数据帧中会为您提供数据帧。


>>> df_filtered = df.loc[mask]

>>> type(result1)

<class 'pandas.core.frame.DataFrame'>

>>> df_filtered

        Q      GDP

3  2009q2  14355.6

从数据框中选择一列会给你一个系列。


>>> type(df_filtered['Q'])

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

>>> df_filtered['Q']

3    2009q2

Name: Q, dtype: object

场景 2

df['GDP'].idxmin()给你一个单一的价值。


>>> idxmin = df['GDP'].idxmin()

>>> idxmin

3

选择数据框的单行返回一个系列。


>>> row = df.loc[idxmin]

>>> type(row)

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

>>> row

Q       2009q2

GDP    14355.6

Name: 3, dtype: object

索引到一个系列会给你一个单一的价值(如果索引是唯一的)。


>>> row['Q']

'2009q2'


查看完整回答
反对 回复 2022-11-18
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信