Not*_*tna 8 python for-loop dataframe pandas
假设我有一个数据框,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建一个 for 循环,迭代每一列(“视图”列除外)和每一行。如果单元格的值不为 0,我想将其替换为同一行中“views”列的相应值。
需要以下输出(应该更容易理解):
option1 option2 option3 views
0 6 0 6 6
1 0 0 10 10
2 5 5 0 5
3 2 0 0 2
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西:
df_range = len(df)
for column in df:
for i in range(df_range):
if column != 0:
column = df.views[i]
Run Code Online (Sandbox Code Playgroud)
但我知道我错过了一些东西,它不起作用。
另请注意,在我的真实数据框中,我有几十列,所以我需要自动迭代每列的东西。谢谢!!
我看到这个线程Update a dataframe in pandas while iterating row by row但它并不完全适用于我的问题,因为我不仅要逐行进行,还需要逐列进行。
您还可以通过以下方式达到您想要的结果:
for col in df:
if col == 'views':
continue
for i, row_value in df[col].iteritems():
df[col][i] = row_value * df['views'][i]
Run Code Online (Sandbox Code Playgroud)
请注意有关此解决方案的以下几点:
1) 该解决方案单独对数据帧中的每个值进行操作,因此比广播效率低,因为它执行两个循环(一个外部循环,一个内部循环)。
2) 该解决方案假设option1
...选项 N 是二进制的,因为本质上该解决方案是将 ...选项 N 中的每个二进制值option1
与 中的值相乘views
。
3) 该解决方案适用于任意数量的选项列。选项列可能有您想要的任何标签。
4) 该解决方案假设有一列标记为views
。
归档时间: |
|
查看次数: |
39979 次 |
最近记录: |