如何在Python中过滤3行矩阵中的行和列?

9fkzdhlc  于 2022-12-15  发布在  Python
关注(0)|答案(2)|浏览(117)

enter image description here
如何过滤,使第2行== '1',并在第1行中找到最小值,然后打印它所在的列?
因此,在这种情况下,结果只会启动驱动程序3 [.941,0.210,1],因为行2为1,行1小于行2中也为“1”的其余驱动程序。
当我尝试np.amin(df,axis=2)时,我得到了我想要的min值,但是第2行返回0而不是1。

oxosxuxt

oxosxuxt1#

首先需要选择感兴趣的列的子集,然后从中找到最小值,然后确定它在哪一列(或者使用argmin同时选择这两个列)(注意,pandas API更倾向于过滤掉行而不是列)。
首先设置一些示例数据

import pandas as pd
import numpy as np
data = np.arange(24).reshape(4,6)
data[1,3:5]=1 # Adjust some values in row 2
df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D', 'E', 'F'])

所以把行和列调换一下

dfT = df.T

获取行2 ==1的列

dfFiltered = dfT[dfT[1] == 1]

查找具有最小值的最小行并获取其索引

dfFiltered.index[dfFiltered[0].argmin()]

对于本例,这将生成'D'

t3psigkw

t3psigkw2#

首先,对于这类应用程序,您确实希望DataFrame被转置,只是不方便对列进行筛选。

import pandas as pd

A = pd.DataFrame(...)
B = A.transpose()

# Now you can filter the drivers where "column" 2 is equal to 1:

C = B[B[2] == 1]

# And find where the minimum of "column" 1 is:

idx = C[1].argmin()

# Finally, find out the driver and its information:

driver = C.index[idx]
info = C.iloc[idx]
# info2 = C.loc[driver] # alternative

# To get the format you want:

print(driver, info.values)

相关问题