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和S
和V1=0.387
(不存在)。 ......等等。
所需的输出:
V2=0
答案 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.vectorize
和df.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