通过计算数组中的字符串并从数组中添加其值来填充大熊猫数据框

时间:2019-09-26 15:43:31

标签: python-3.x pandas numpy

1)numpy数组 r ,其中包含字符串。

import numpy as np
r = np.array([['S', 'S'],['S', 'V1'],['S', 'V2'],['V1', 'S'],['V1', 'V1']])

2)numpy数组 acc 值。第一个值是二维数组 r 的第一个元素,第二个值是二维数组 r 的第二个元素>

acc = np.array([0.613,0.387])

3)问题:我要填充数据框df1。例如:Row1)数组 r[0]=['S', 'S'] 都包含'S',然后在df1和S和{{1}中填充V1 = 0.613 + 0.387 = 1.0 df1中的}将为零,因为它们不存在于数组中。第2行)数组 V2 包含一个'S',然后在df1中填充r[1]=['S', 'V1'] = 0.613和SV1=0.387(不存在)。 ......等等。

所需的输出:

V2=0

2 个答案:

答案 0 :(得分:3)

您可以堆叠数据框,映射值并向后旋转:

s = pd.DataFrame(r).stack().reset_index(name='val')

s['level_1'] = acc[s['level_1']]

s.pivot_table(index='level_0', 
              columns='val', 
              values='level_1', 
              aggfunc='sum', 
              fill_value=0)

输出:

val          S     V1     V2
level_0                     
0        1.000  0.000  0.000
1        0.613  0.387  0.000
2        0.613  0.000  0.387
3        0.387  0.613  0.000
4        0.000  1.000  0.000

答案 1 :(得分:1)

axis=1上使用pd.get_dummies()np.vectorizedf.groupby()的另一种方法:

df=pd.get_dummies(pd.DataFrame(r),prefix='',prefix_sep='')
s=pd.Series(acc,index=range(1,len(acc)+1))

final=(pd.DataFrame(np.vectorize(s.get)(np.where(df.eq(1),df.cumsum(axis=1),df)),
            columns=df.columns).groupby(df.columns,axis=1).sum())

       S     V1     V2
0  1.000  0.000  0.000
1  0.613  0.387  0.000
2  0.613  0.000  0.387
3  0.387  0.613  0.000
4  0.000  1.000  0.000