【发布时间】:2018-01-01 21:04:52
【问题描述】:
我从看起来像这样的数据开始,但行数更多:
Location Sample a b c d e f g h i
1 w 14.6 0 0 0 0 0 0 0 16.8
2 x 0 13.6 0 0 0 0 0 0 16.5
3 y 0 0 15.5 0 0 0 0 0 16.9
4 z 0 0 0 0 14.3 0 0 0 15.7
...
数据由前两列索引。我需要从 a - h 中的每个值中减去 i 列中的值,在每个原始列的数据框右侧添加一个新列。但是,如果第一列中有零,我希望它保持为零而不是减去。例如,如果我的代码有效,我将以下列添加到右侧的数据框中
Location Sample ... a2 b2 c2 d2 e2 f2 g2 h2
1 w ... -2.2 0 0 0 0 0 0 0
2 x ... 0 -2.9 0 0 0 0 0 0
3 y ... 0 0 -1.4 0 0 0 0 0
4 z ... 0 0 0 0 -1.4 0 0 0
...
如果当前列中的值不为零,我正在尝试使用 pandas 中的 where 仅减去 i 列中的值,使用以下代码:
import pandas as pd
normalizer = i
columns = list(df.columns.values)
for column in columns:
if column == normalizer: continue
newcol = gene + "2"
df[newcol] = df.where(df[column] == 0,
df[column] - df[normalizer], axis = 0)
我正在使用 for 循环,因为列数并不总是相同,并且被减去的列将使用不同的数据集具有不同的名称。
我收到此错误:“ValueError:错误的项目数通过了 9,位置意味着 1”。
我认为减法是导致问题的原因,但我不知道如何更改它以使其正常工作。任何帮助将不胜感激。
提前致谢。
【问题讨论】:
标签: python-3.x pandas dataframe subtraction