python pandas-可以使用where(max())比较相同形状的3个dfs?这是一个掩蔽问题吗?

2024-02-18

我有一个包含 3 个形状相同的数据帧的字典。我想创建:

  1. 第 4 个数据帧,用于标识每个坐标处原始 3 个数据帧的最大值 - 因此 dic['four'].ix[0,'A'] = MAX( dic['one'].ix[0,'A'] , dic['二'].ix[0,'A'], dic['三'].ix[0,'A'] )
  2. 第二大值的第五个

    dic = {}
    for i in ['one','two','three']:
        dic[i] = pd.DataFrame(np.random.randint(0,100,size=(10,3)), columns=list('ABC'))
    

我不知道如何使用 .where() 来比较原始的 3 个 dfs。对于最终数据集来说,循环效率很低。


考虑dict dfs这是一本字典pd.DataFrames

import pandas as pd
import numpy as np

np.random.seed([3,1415])
dfs = dict(
    one=pd.DataFrame(np.random.randint(1, 10, (5, 5))),
    two=pd.DataFrame(np.random.randint(1, 10, (5, 5))),
    three=pd.DataFrame(np.random.randint(1, 10, (5, 5))),
)

处理这个问题的最好方法是使用pd.Panel对象,这是类似于的更高维对象pd.DataFrame.

p = pd.Panel(dfs)

那么你需要的答案就非常简单

max
p.max(axis='items') or p.max(0)

倒数第二个
p.apply(lambda x: np.sort(x)[-2], axis=0)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python pandas-可以使用where(max())比较相同形状的3个dfs?这是一个掩蔽问题吗? 的相关文章

随机推荐