[英]Efficiently find the minimum value in a DataFrame
我可以使用通常的 Pandas 向量化操作在小数据集上获得最小值及其行和列:
import pandas as pd
data = pd.DataFrame([
['A', 'asdf', 1, 2, 3],
['B', 'zxcv', 4, 5, 6],
['C', 'qwer', 2, 5, 3],
['D', 'hjkl', 3, 9, 4],
], columns=['entity', 'code', '2007', '2008', '2009']).set_index('entity')
data_num = data.drop(columns=['code'])
minval = data_num.min().min()
minval_row = data_num.min(axis='columns').idxmin()
minval_col = data_num.min().idxmin()
print(minval, minval_row, minval_col)
# 1 A 2007
然而,这需要对数据进行 3 次单独的扫描,这是低效的。
从算法上讲,一次遍历数据即可获得所有 3 个值。 使用 Pandas 或 Numpy API 是否有可能?
请注意,我也想避免复制数据。 我认为如果您拥有所有相同.to_numpy()
数据, .to_numpy()
将不会复制,但我不是 100% 确定。
我认为你可以stack
:
minval = data_num.min().min()
print (data[data.eq(minval)].stack())
entity
A 2007 1.0
dtype: object
您可以从展平底层数组(单程)中获取最小值,并使用简单的数学(快速操作)发送回计算位置:
idx = data_num.values.flatten().argmin()
col = data_num.columns[idx%len(data_num.columns)]
row = data_num.index[idx//len(data_num.columns)]
col, row
输出:
('2007', 'A')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.