数据框底部具有 max/min 个值的 Return 行 (python/pandas)
Return rows with max/min values at bottom of dataframe (python/pandas)
我想编写一个可以查看数据帧的函数,找到指定列中的最大值或最小值,然后 return 整个数据帧,其中包含最大值或最小值的行在底部。
我这样做是为了让具有最大值或最小值的行单独得到 returned。
def findAggregate(df, transType, columnName=None):
if transType == 'max1Column':
return df[df[columnName] == df[columnName].max()]
elif transType == 'min1Column':
return df[df[columnName] == df[columnName].min()]
鉴于下面的数据框,我想检查 col2 的最小值
原始数据框:
col1 col2 col3
blue 2 dog
orange 18 cat
black 6 fish
预期输出:
col1 col2 col3
blue 2 dog
orange 18 cat
black 6 fish
blue 2 dog
实际输出:
col1 col2 col3
blue 2 dog
您可以在 oneliner 中执行此操作:
df.append(df.loc[df['col2'].idxmin()])
输出:
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
所以sort_values
df.append(df.sort_values('col2').iloc[[0]])
Out[764]:
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
如果需要 max
df.append(df.sort_values('col2').iloc[[-1]])
同时添加 min
和 max
df.append(df.sort_values('col2').iloc[[0,-1]])
Out[765]:
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
1 orange 18 cat
使用idxmin
或idxmax
:
在 AndyL 的评论后编辑为 .loc
df.append(df.loc[df['col2'].idxmin()], ignore_index=True)
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
3 blue 2 dog
您可以通过多种方式进行。这是一个:
def findAggregate(df, transType, columnName=None):
if transType == 'max1Column':
return df.append(df.loc[df['col2'].idxmax()])
elif transType == 'min1Column':
return df.append(df.loc[df['col2'].idxmin()])
关注指标值
并使用一个 loc
i = df.col2.idxmin()
df.loc[[*df.index] + [i]]
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
相同的想法,但使用 Numpy 和 iloc
i = np.arange(len(df))
a = df.col2.to_numpy().argmin()
df.iloc[np.append(i, a)]
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
这是另一种方式:
In [30]: df.append(df.loc[lambda x:x.col2 == x.col2.min()]).reset_index(drop=True)
Out[30]:
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
3 blue 2 dog
我想编写一个可以查看数据帧的函数,找到指定列中的最大值或最小值,然后 return 整个数据帧,其中包含最大值或最小值的行在底部。
我这样做是为了让具有最大值或最小值的行单独得到 returned。
def findAggregate(df, transType, columnName=None):
if transType == 'max1Column':
return df[df[columnName] == df[columnName].max()]
elif transType == 'min1Column':
return df[df[columnName] == df[columnName].min()]
鉴于下面的数据框,我想检查 col2 的最小值
原始数据框:
col1 col2 col3
blue 2 dog
orange 18 cat
black 6 fish
预期输出:
col1 col2 col3
blue 2 dog
orange 18 cat
black 6 fish
blue 2 dog
实际输出:
col1 col2 col3
blue 2 dog
您可以在 oneliner 中执行此操作:
df.append(df.loc[df['col2'].idxmin()])
输出:
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
所以sort_values
df.append(df.sort_values('col2').iloc[[0]])
Out[764]:
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
如果需要 max
df.append(df.sort_values('col2').iloc[[-1]])
同时添加 min
和 max
df.append(df.sort_values('col2').iloc[[0,-1]])
Out[765]:
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
1 orange 18 cat
使用idxmin
或idxmax
:
在 AndyL 的评论后编辑为 .loc
df.append(df.loc[df['col2'].idxmin()], ignore_index=True)
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
3 blue 2 dog
您可以通过多种方式进行。这是一个:
def findAggregate(df, transType, columnName=None):
if transType == 'max1Column':
return df.append(df.loc[df['col2'].idxmax()])
elif transType == 'min1Column':
return df.append(df.loc[df['col2'].idxmin()])
关注指标值
并使用一个 loc
i = df.col2.idxmin()
df.loc[[*df.index] + [i]]
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
相同的想法,但使用 Numpy 和 iloc
i = np.arange(len(df))
a = df.col2.to_numpy().argmin()
df.iloc[np.append(i, a)]
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
0 blue 2 dog
这是另一种方式:
In [30]: df.append(df.loc[lambda x:x.col2 == x.col2.min()]).reset_index(drop=True)
Out[30]:
col1 col2 col3
0 blue 2 dog
1 orange 18 cat
2 black 6 fish
3 blue 2 dog