我正在尝试设置一种循环通过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)
这是我正在努力的一点,我不确定如何保留这些数据,而不会被覆盖
答案 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()}