熊猫:如何获得第一个正数?

时间:2019-07-01 12:43:22

标签: python pandas numpy

我有一个熊猫数据框,如:

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

3 个答案:

答案 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)(熊猫广播应处理其余部分)