gpt4 book ai didi

python Pandas : Find the maximum for each row in a dataframe column containing a numpy array

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:10 24 4
gpt4 key购买 nike

我得到了一个如下所示的 Pandas DataFrame:

      values                                      max_val_idx
0 np.array([-0.649626, -0.662434, -0.611351]) 2
1 np.array([-0.994942, -0.990448, -1.01574]) 1
2 np.array([-1.012, -1.01034, -1.02732]) 0

df['values'] 包含 3 个元素的固定长度的 numpy 数组
df['max_val_idx]包含对应数组最大值的索引

既然已经给出了每个数组的最大元素的索引,那么提取每个条目的最大值的最有效方法是什么?
我知道数据存储起来有点傻,但我不是自己创建的。由于我要处理大量数据(+- 50GB,因为数百个腌制数据库以类似方式存储),我想知道什么是最省时的方法。

到目前为止,我尝试遍历 df['max_val_idx] 的每个元素,并将其用作在 df['values'] 中找到的每个数组的索引:

max_val = []         
for idx, values in enumerate(df['values']):
max_val.append(values[int(df['max_val_idx'].iloc[idx])])

有没有更快的替代方案?

最佳答案

我会忘记“max_val_idx”列。我不认为它可以节省时间,实际上对语法来说更痛苦。示例数据:

df = pd.DataFrame({ 'x': range(3) }).applymap( lambda x: np.random.randn(3) )

x
0 [-1.17106202376, -1.61211460669, 0.0198122724315]
1 [0.806819945736, 1.49139051675, -0.21434675401]
2 [-0.427272615966, 0.0939459129359, 0.496474566...

你可以像这样提取最大值:

df.applymap( lambda x: x.max() )

x
0 0.019812
1 1.491391
2 0.496475

但一般来说,如果每个单元格有一个数字,生活会更轻松。如果每个单元格都有一个长度为 3 的数组,您可以像这样重新排列:

for i, v in enumerate(list('abc')): df[v] = df.x.map( lambda x: x[i] )
df = df[list('abc')]

a b c
0 -1.171062 -1.612115 0.019812
1 0.806820 1.491391 -0.214347
2 -0.427273 0.093946 0.496475

然后做一个标准的pandas操作:

df.apply( max, axis=1 )

x
0 0.019812
1 1.491391
2 0.496475

诚然,这并不比上面容易多少,但总的来说,以这种形式处理数据会容易得多。

关于 python Pandas : Find the maximum for each row in a dataframe column containing a numpy array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41108859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com