【问题标题】:Cycling through a dictionary of dataframes for values above a threshold循环遍历数据帧字典以获取高于阈值的值
【发布时间】:2017-10-26 08:46:53
【问题描述】:

我正在尝试设置一种方法来循环遍历 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)

这是我正在努力解决的问题,我不知道如何保留这些数据,而不会被覆盖

【问题讨论】:

  • 请不要在您的帖子中大喊大叫。
  • 另外,如果你有一列没有超过阈值的元素,它还会显示吗?
  • 对不起,我没有意识到我在大喊大叫。我怎么知道我是否在喊叫?
  • 句子旁边的 # 使句子膨胀为标题。
  • 是的,如果列中没有高于阈值的元素,我希望它显示为 false 或 0。

标签: python pandas dictionary dataframe


【解决方案1】:

如果您只想要一个布尔掩码,我假设您正在寻找 dict 理解

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()}

【讨论】:

  • @Emma 不客气。不要忘记投票并接受答案(单击答案旁边的灰色复选标记将其切换为绿色)。
猜你喜欢
  • 1970-01-01
  • 2020-11-04
  • 2019-08-13
  • 1970-01-01
  • 2013-11-29
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
相关资源
最近更新 更多