在Python中的熊猫每个单元格中查找最大值/最小值

时间:2019-08-14 20:59:20

标签: python pandas

我是Pandas的新手,我有一个csv数据文件,并且试图为特定列的每一行查找最大值和最小值。数据看起来像这样:

first_name_2

这是我的CSV文件的一列(约600行中的前5行)。如您所见,它在每个单元格中都有多个值(这些是学校提供的成绩)。如何从此信息中找到最小值和最大值?预先感谢

我尝试使用dataFrame.max()/ dataFrame.min(),但是它给出了整个行或列的最大值/最小值。我的问题是特定于单元格的。我也考虑过将每个单元格转换成一个列表,然后可以使用python默认函数找到max / min,但是我真的不想那样做。我想坚持使用熊猫和数据框

first_name

我的预期输出是(在“最大”情况下):

First_Name

我的预期输出是(在“最小”情况下):

0          PK,K,1,2,3,4,5
1    PK,K,1,2,3,4,5,6,7,8
2    PK,K,1,2,3,4,5,6,7,8
3                   K,1,2
4                PK,K,1,2

2 个答案:

答案 0 :(得分:0)

使用.max方法时更改轴, 默认情况下,会计算DataFrame每列的最大值, 需要 axis=1每行计算一次

length_ = gradesOffered.shape
print(length_)
print(gradesOffered.iloc[0:5,0])
print(gradesOffered.iloc[0:5,0].max(axis=1))

答案 1 :(得分:0)

您应该创建自己的函数,以查找最小值/最大值,并使用.apply创建具有每一行的最小值和最大值的列。尝试根据单个单元格的位置查找最小值/最大值会很麻烦。

示例:

import pandas as pd


def max_school(row):
    order = ['PK', 'K', '1', '2', '3', '4', '5', '6', '7', '8']
    sort = sorted(row.dropna(), key=lambda x:order.index(x))
    return sort[-1]

def min_school(row):
    order = ['PK', 'K', '1', '2', '3', '4', '5', '6', '7', '8']
    sort = sorted(row.dropna(), key=lambda x:order.index(x))
    return sort[0]

df = pd.read_csv('something.csv', dtype=str)

df['Max'] = df.apply(lambda x: max_school(x), axis=1)
df['Min'] = df.apply(lambda x: min_school(x), axis=1)

print(df)

这将输出:

     1    2    3    4    5    6    7  8  9 10 Max Min
0  NaN  NaN  NaN   PK    K    1    2  3  4  5   5  PK
1   PK    K    1    2    3    4    5  6  7  8   8  PK
2   PK    K    1    2    3    4    5  6  7  8   8  PK
3  NaN  NaN  NaN  NaN  NaN  NaN  NaN  K  1  2   2   K
4  NaN  NaN  NaN  NaN  NaN  NaN   PK  K  1  2   2  PK