我正在尝试研究在我的数据中具有零值的概率,并且我已经开发了一个代码,当另一个为零时输出一列数据的值,这是我需要的。但是我必须为每个列与我的577by29数据帧中的所有其他28个数据框执行此操作很困难所以我决定创建一个for循环来为我执行此操作:
import numpy as np
import pandas as pd
allchan = pd.read_csv('allchan.csv',delimiter = ' ')
allchanarray = np.array(allchan)
dfallchan = pd.DataFrame(allchanarray,range(1,578),dtype=float)
y = pd.DataFrame()
x = pd.DataFrame()
for n in range(0,29):
x[n] = dfallchan[(dfallchan[0]>0) & (dfallchan[n]==0)][0]
y[n] = x[n].count()
x.to_excel('n.xlsx', index=False, sheet_name='ValForOtherZero')
y.to_excel('v.xlsx', index=False, sheet_name='CountOfZeroVlas')
问题是循环由于某种原因正确地通过这些行:
x[n] = dfallchan[(dfallchan[0]>0) & (dfallchan[n]==0)][0]
y[n] = x[n].count()
但是对于第二个条件它重复n = 6的值:
(dfallchan[n]==0)
代码的输出应返回第一个通道的不同值,因为零在我的输入文件中随机分布,但我的输出对于数据是正确的,直到第6列 - 我的列(0-5)应该是空的 - 它重复所有其他列的输出! 输出: output 1
你可以看到代码循环正确,因为输出数据框有n = 29列但不适用于上面指定的条件。
请帮忙,谢谢!
答案 0 :(得分:0)
终于明白了!
这段代码完全符合我的要求!
BeanExpressionContext
答案 1 :(得分:0)
这会更有效率。
all_values = []
for n in range(0,29):
condition = (dfallchan[0]>0) & (dfallchan[n]==0)
count = condition.sum()
vals = dfallchan[condition][0].values
all_values.append(vals)
all_values_df = pd.DataFrame(all_values).transpose()
在这里,我首先创建一个列表列表并将所有值附加到它。然后在最后我创建数据帧并转置它。