我正在尝试用python编写一个循环,它检查 Dataframe 的每个元素,并为其分配一个新值。(x,y)-对数(x-1,y)(x,y是行和列的索引)应该对每个单元格执行。但是,对于各个单元格为0的情况有一些规范。我已经在下面的代码中指定了这些情况。然后,我想把新的值存储在一个新的 Dataframe 中,这个 Dataframe 的形状和旧的 Dataframe 完全一样。我已经设法让我的代码运行一列的所有行,并创建一个值列表,但是,我不知道如何在运行完一列的所有行后,让它改变列。
这是我为了更好地理解问题和循环如何运行而创建的示例性数据。我的数据实际上是一个超过6000行和30列的数据框架。
data = {'date': ["2004-01-01", "2004-01-02", "2004-01-03","2004-01-04"],
'a': [100, 0, 0, 50],'b': [5, 76, 3, 100], 'c': [80, 0, 22, 100]}
data=pd.DataFrame.from_dict(data)
data.set_index("date", inplace=True)
log_diff=[np.nan] # fill with NaN since first row cannot be differenced
x=1
y=0
while x<4:
if np.logical_and(data.iloc[x,y] > 0, data.iloc[x-1,y] > 0):
z=np.log(data.iloc[x,y])-np.log(data.iloc[x-1,y])
elif np.logical_and(data.iloc[x,y] > 0, data.iloc[x-1,y] == 0):
z= 1
elif np.logical_and(data.iloc[x,y] == 0, data.iloc[x-1,y] > 0):
z= -1
elif np.logical_and(data.iloc[x,y] == 0, data.iloc[x-1,y] == 0):
z= 0
else:
print("error")
log_diff.append(z)
x=x+1
print(log_diff)
这段代码看起来很适合我,但是,我还不知道如何更改y值。我尝试将此循环嵌套到另一个循环中,该循环应在到达最后一行时更改y值。但我只得到了错误的结果(已尝试将此循环嵌套到另一个while循环和另一个if循环中)。如果有人能告诉我在代码到达相应列的最后一行后如何更改列,那就太好了。
1条答案
按热度按时间2q5ifsrm1#
可以使用迭代行迭代项