循环访问数据帧字典,以获取高于阈值

时间:2017-10-26 00:30:43

标签: python pandas dictionary dataframe

我正在尝试设置一种循环通过100元素字典的方法,其中每个元素是42,000行数据帧并检查该值是否高于阈值

我在解决如何存储行数据时遇到问题,因此不会被覆盖 我已经为我想做的事做了一个简单的例子:

我有一个三元素字典(my_dic),其中每个元素都是一个数据帧 我想循环遍历每个数据帧的每一行,并检查是否有任何列高于阈值数。 我一直在尝试使用.any()和.where但我不知道如何分别捕获每个df的数据。

我想最终得到三个单独的新df,每个列中的布尔值都高于阈值。

任何帮助都会很棒!

d1 = np.random.rand(3,3)
d2 = np.random.rand(3,3)
d3 = np.random.rand(3,3)

df1 =pd.DataFrame(d1, index=['a', 'b', 'c'])
df2 =pd.DataFrame(d2, index=['a', 'b', 'c'])
df3 =pd.DataFrame(d3, index=['a', 'b', 'c'])

my_dic = {}
my_dic['a'] = df1   
my_dic['b'] = df2  
my_dic['c'] = df3   

threshold = 0.5

我想循环遍历my_dic中每个键的每一行,如果值大于阈值数,则将值更改为布尔值

for k in my_dic:
    print k
    data = my_dic[k]
    for row in range(len(data)):
        print row
        np.where(data.iloc[row,:] > threshold)

这是我正在努力的一点,我不确定如何保留这些数据,而不会被覆盖

1 个答案:

答案 0 :(得分:2)

我假设你正在寻找一个 dict comprhension ,如果你只是想要一个布尔掩码。

result = {k : v > threshold for k, v in my_dic.items()}
for v in result.values():
    print(v, '\n')

       0      1      2
a  False  False  False
b   True  False   True
c  False   True   True 

       0     1     2
a  False  True  True
b   True  True  True
c  False  True  True 

       0      1      2
a  False  False  False
b  False  False  False
c   True   True  False 

如果您希望结果为0/1,请使用astype

result = {k : v.gt(threshold).astype(int) for k, v in my_dic.items()}