假设我有一个如下所示的数据框:
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
我正在尝试构建一个循环遍历每一列(“视图”列除外)和每一行的循环。如果单元格的值不为 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
我试过类似的东西:
df_range = len(df)
for column in df:
for i in range(df_range):
if column != 0:
column = df.views[i]
但我知道我遗漏了一些东西,它不起作用。
另外请注意,在我的真实数据框中,我有几十列,所以我需要一些东西来自动迭代每一列。谢谢!!
我看到这个线程 Update a dataframe in pandas while iterateing row by row 但它并不完全适用于我的问题,因为我不仅要逐行,我还需要逐列。
原文由 Notna 发布,翻译遵循 CC BY-SA 4.0 许可协议
您也可以通过这种方式实现您想要的结果:
请注意有关此解决方案的以下内容:
此解决方案单独对数据帧中的每个值进行操作,因此效率低于广播,因为它执行两个循环(一个外部循环,一个内部循环)。
此解决方案假设
option1
…选项 N 是二进制的,因为基本上此解决方案是将option1
…选项 N 中的每个二进制值与 —ca03e5892834987a1673630 中的值views
。此解决方案适用于任意数量的选项列。选项列可以有任何你想要的标签。
此解决方案假定有一列标记为
views
。