我是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
答案 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