对不起,标题可能比问题本身更复杂;)
我有以下熊猫数据框
grh anc anc1 anc2 anc3 anc4 anc5 anc6 anc7
1 2 5 0.10000 0.12000 0.1800 0.14000 0.15000 0.1900 0.20000
2 3 7 0.03299 0.05081 0.0355 0.02884 0.03054 0.0332 0.03115
3 4 3 0.00000 0.00000 0.0000 0.00000 0.00000 0.0000 0.00000
4 5 4 0.00000 0.00000 0.0000 0.00000 0.00000 0.0000 0.00000
5 6 1 0.10000 0.10000 0.1000 0.10000 0.10000 0.1000 0.10000
anc8 anc9 anc10
1 0.10000 0.21000 0.24000
2 0.02177 0.04903 0.04399
3 0.00000 0.00000 0.00000
4 0.00000 0.00000 0.00000
5 0.10000 0.10000 0.10000
我想添加带有 forloop lap1, lap2, ....取决于变量 anc 的值的新列。例如,在第一行, anc=5 所以 lap1 应该等于 anc5 (0.1500)的值,lap2 等于 anc6 (0.1900) ...在第二行 lap1=anc7 (0.03115), lap2=anc8 ( 0.02177) ,...
所以,输出应该看起来像
grh anc anc1 anc2 anc3 anc4 anc5 anc6 anc7 anc8 anc9 anc10 lap1 lap2 lap3
2 5 0.10000 0.12000 0.18000 0.14000 0.15000 0.19000 0.20000 0.1000 0.21000 0.24000 0.15000 0.19000 0.20000
3 7 0.03299 0.05081 0.0355 0.02884 0.03054 0.0332 0.03115 0.02177 0.04903 0.04399 0.03115 0.02177 0.04903
4 3 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
5 4 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
6 1 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000 0.10000
我尝试了一些非常基本的东西,但似乎不起作用
for i in range(1,4):
j=df['anc']+i
df['lap'+str(i)]= df['anc'+str(j)]
如果您有任何想法,我将不胜感激。谢谢
有点“蛮力”的方法,但我看不出你怎么能这样做:
df[[f"lap{i}" for i in range(1,4)]]= \
df.apply(lambda x: \
pd.Series({f"lap{j}": x[f"anc{int(j+x['anc']-1)}"] for j in range(1,4)}) \
, axis=1)
(假设根据您的样本,您的最大值lap
为 3)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句