TL; DR
考虑以下pd.Dataframe:
a0 d2 b3 t4
0 1 2 3 0.8
1 3 4 3 9.0
2 5 6 5 2.5
3 7 7 7 8.0
我想按行将掩码cols = ['a0', 'd2', 'b3']
指定的列(按行中的元素,例如a0
)划分。以下代码可产生所需的结果:
# just to surpress pandas chain-assignment warning
pd.options.mode.chained_assignment = None
d = pd.DataFrame([[1,2,3,.8], [3,4,3,9], [5,6,5,2.5], [7,7,7,8]],columns=["a0", "d2", "b3", "t4"])
# mask
cols = ['a0', 'd2', 'b3']
for i, row in d.iterrows():
a0 = float(row["a0"])
for k, v in row.iteritems():
if k in cols:
d[k][i] /= a0
输出:
a0 d2 b3 t4
0 1 2 3 0.8
1 1 1 1 9.0
2 1 1 1 2.5
3 1 1 1 8.0
问题
我的问题是,是否有更复杂的方法来执行上述代码?我在想类似
的表达式d.loc[:, cols] /= d.ix[:, ['a0']],
我认为几乎可以胜任工作,但是给我各部门的NaN:
a0 d2 b3 t4
0 1.0 NaN NaN 0.8
1 1.0 NaN NaN 9.0
2 1.0 NaN NaN 2.5
3 1.0 NaN NaN 8.0
任何人都可以给我一个有关如何更正/替换最后一个表达式的提示。它按说明工作(并执行浮点除法)?该解决方案应该足够通用,以使用大小约为500的掩码,因为a-priori并不知道列名,而是使用reg-expressions生成它们。
答案 0 :(得分:0)
尝试:
Source Cell Range