我有一个熊猫数据框,如:
name a b c
jack -10 -6 -10
bill -6 -3 -5
ray -3 -12 -9
pew 4 -23 -2
shaun 12 3 2
mitch 3 5 2
我如何制作一个新数据框,该数据框从各个列(a,b,c)中获取第一个正值,然后将该列中的所有值除以该列的所选第一个正值,并存储除法结果代替所有值。输出应该像这样
name a b c
jack -10/4 -6/3 -10/2
bill -6/4 -3/3 -5/2
ray -3/4 -12/3 -9/2
pew 4/4 -23/3 -2/2
shaun 12/4 3/3 2/2
mitch 3/4 5/3 6/2
答案 0 :(得分:3)
这是另一种方式:
mapA.keySet().parallelStream()
.filter(v->mapB.keySet().parallelStream()
.filter(e->mapB.get(v).equals(mapA.get(v)))
.filter(v->!v.equals(v)).count()>0)
.forEach(System.out::println);
m=df.set_index('name')
final=m.div(m.mask(m.lt(0)).bfill().iloc[0]).reset_index()
答案 1 :(得分:1)
您可以检查数据框中的哪些值大于0
,并采用idxmax
(第一个为True),然后按列除以结果值。
ix = df.loc[:,'a':].gt(0).idxmax()
df.loc[:,'a':] = df.loc[:,'a':].div(df.lookup(ix.values, ix.index))
name a b c
0 jack -2.50 -2.000000 -5.0
1 bill -1.50 -1.000000 -2.5
2 ray -0.75 -4.000000 -4.5
3 pew 1.00 -7.666667 -1.0
4 shaun 3.00 1.000000 1.0
5 mitch 0.75 1.666667 1.0
答案 2 :(得分:0)
a/a.head(1)
(熊猫广播应处理其余部分)