运行在 Dataframe (列和行)中每个单元格上的Python循环

hrysbysz  于 2022-12-25  发布在  Python
关注(0)|答案(1)|浏览(110)

我正在尝试用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循环中)。如果有人能告诉我在代码到达相应列的最后一行后如何更改列,那就太好了。

2q5ifsrm

2q5ifsrm1#

可以使用迭代行迭代项

for row_index, row in data.iterrows():
    for col_name, cell_value in row.iteritems():
        result.at[row_index, col_name] = cell_value + 1

相关问题