Say I have a dataframe that looks like:
d = {'option1': ['1', '0', '1', '1'], 'option2': ['0', '0', '1', '0'], 'option3': ['1', '1', '0', '0'], 'views': ['6', '10', '5', '2']
df = pd.DataFrame(data=d)
print(df)
option1 option2 option3 views
0 1 0 1 6
1 0 0 1 10
2 1 1 0 5
3 1 0 0 2
I'm trying to build a for loop that iterates over each column (except the column "views") and each row. If the value of a cell is not 0, I want to replace it with the corresponding value of the column "views" from the same row.
The following output is required (should be easier to understand):
option1 option2 option3 views
0 6 0 6 6
1 0 0 10 10
2 5 5 0 5
3 2 0 0 2
I tried something like:
df_range = len(df)
for column in df:
for i in range(df_range):
if column != 0:
column = df.views[i]
But I know I'm missing something, it does not work.
Also please note that in my real dataframe, I have dozens of columns, so I need something that iterates over each column automatically. Thanks!!
I saw this thread Update a dataframe in pandas while iterating row by row but it doesn't exactly apply to my problem, because I'm not only going row by row, I also need to go column by column.
for column in df, your column variable will be the column name.column != 0:won't work because of that. If you are trying to access that specific cell, you need to checkdf[column].iloc[i] !=0. Know that this is horribly inefficient though.df.loc[:, 'option1':'option3'].mul(df['views'], axis=0)You can assign this back in the same waydf.loc[:, 'option1':'option3']. = df.loc[:, 'option1':'option3'].mul(df['views'], axis=0)