在使用dataframe时经常会碰到一个问题,即如何取出某一个值所在行的另一个列的值,下面简单介绍一种简单的方法 

定义一个实例DataFrame

import pandas as pd

df = pd.DataFrame({'name':['DENVER', 'BOULDER', 'DURANGO'],'pop':[634265, 98889, 17069]})
print(df)

实例的DataFrame如下: 为美国科罗拉多州的三个城市的名字和其人口

      name     pop
0   DENVER  634265
1  BOULDER   98889
2  DURANGO   17069

提出需求:打印出人口(pop)最多的城市的名字(name)

经过多次的尝试,发现一种可以快速实现该需求的方法:

1.首先需要找出最大的pop是多少 —— 有以下两种方法:

 ① 利用 dataframe 的 describe() 功能

des=df.describe()
print(des)

describe() 用于显示表格数据每个列(数值列)的统计信息 其返回值仍是一个dataframe 结果如下:

max一行即可找出最大的pop数值

                 pop
count       3.000000
mean   250074.333333
std    335224.520829
min     17069.000000
25%     57979.000000
50%     98889.000000
75%    366577.000000
max    634265.000000

 ② 更简单的找出最大pop的方法:

max_pop = max(df['pop'])
# 打印出 max_pop 的值为 634265

2.其次打印出最大pop对应的城市的名字name —— 有以下两种方法:

在这个步骤中我遇到了困扰很久的问题,无论我怎么打印,打印的结果都是object类型,无法直接取出字符串

探索良久,发现了以下的简便方法:

① 最简单的方法 直接得到城市名字的字符串

     首先将pop列设置为索引index,之后便可以通过loc方法直接根据索引和列名取出所需要的值

df=df.set_index('POP')  #将条件的列设为索引
cityName=df.loc[max_pop,'NAME']   #按照dataframe的.loc[索引,列名]取出对应的元素值
print(cityName)

#结果如下:
'DENVER'

② 第二种方法则可以取出最大pop所在的整行 

#首先看一下这个布尔表达式得到的是什么:
df['pop']==634265
#结果:
0     True
1    False
2    False
Name: pop, dtype: bool

# 取出true所在行:
df[df['pop']==634265]
#结果:
     name     pop
0  DENVER  634265

总结

上述为本人的探索过程,个人认为最简单的方法还是设置索引,之后通过索引来取所需要的值。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐