One - One Code All

Blog Content

python中pandas的DataFrame某列最大值所在行

Python 统计学-科学计算   2015-12-13 22:35:24

定位列或者行的最大值所在位置。

有三种方法(argmax,仍然存在,idxmax和numpy.argmax)

# pandas:

ind = df["A"].idxmax()
row = df.iloc[ind,:]

# numpy:

#将array转化为DataFrame
arr=pd.DataFrame(array,columns=["one","two","three","four"])
#分别求行最大值及最大值所在索引
arr['max_value']=arr.max(axis=1)
arr['max_index']=np.argmax(array,axis=1)


# ex1:

text = pd.DataFrame([[21,45,78],[23,56,89],[14,25,36],[47,58,69]])   # 先建立一个矩阵
print(text)
Out[1]: 
    0   1   2
0  21  45  78
1  23  56  89
2  14  25  36
3  47  58  69
 
# 找到最大值和最大值所对应的位置
text.stack().max()
Out[2]: 89
text.stack().idxmax()
Out[3]: (1, 2)
# 或者是p,q = text.stack().idxmax()    # 将值赋给p,q
 
# 找最小值和最小值所对应的位置
text.stack().min()
Out[4]: 14
text.stack().idxmin()

# 获得某行的最大值对应的的列索引(包含多个相等的最大值的情况)

import pandas as pd 
import numpy as np

# create a dataframe
table = pd.DataFrame(np.zeros([3,2]), index=["s1", "s2", "s3"], columns=["a1","a2"])
"""
     a1   a2
s1  0.0  0.0
s2  0.0  0.0
s3  0.0  0.0
"""
# 获得 s1 行
s1 = table.loc["s1",:]

# 获得 s1 中最大值的索引,可能有多个
s1_argmax = s1[s1 == s1.max()].index

# randomly choose 1 index
s1_argmax = np.random.choice(s1_argmax) 

# 报错的情况,TypeError: reduction operation 'argmin' not allowed for this dtype,
# 解决办法,类型转换:列的数据转为float64.
# 把df的每列数据类型打印出来看看。
print df.dtypes
df['low']=df['low'].astype('float64')



上一篇:cvxopt矩阵转换np.double, converting numpy vector to cvxopt
下一篇:cvxopt二次规划

The minute you think of giving up, think of the reason why you held on so long.