我试图解决以下问题。我有两个数据集,比如df1和df2:
df1
NameSP Val Char1 BVA
0 'ACCR' 0.091941 A Y'
1 'SDRE' 0.001395 S Y'
2 'ACUZ' 0.121183 A N'
3 'SRRE' 0.001512 S N'
4 'FFTR' 0.035609 F N'
5 'STZE' 0.000637 S N'
6 'AHZR' 0.001418 A Y'
7 'DEES' 0.000876 D N'
8 'UURR' 0.023878 U Y'
9 'LLOH' 0.004371 L Y'
10 'IUUT' 0.049102 I N'
df2
NameSP Val1 Glob
0 'ACCR' 0.234 20000
1 'FFTR' 0.222 10000
2 'STZE' 0.001 5000
3 'DEES' 0.006 2000
4 'UURR' 0.134 20000
5 'LLOH' 0.034 10000
我想在df1中对df2执行索引,然后将索引向量用于各种矩阵运算。这将类似于Matlab中的strmatch(A,B,'xact'(。我可以通过使用.iloc和.isin来正确地获取索引,如下代码所示:
import pandas as pd
import numpy as np
df1 = pd.read_excel('C:PYTHONCODESLINEAROPTTEST_DATA1.xlsx')
df2 = pd.read_excel('C:PYTHONCODESLINEAROPTTEST_DATA2.xlsx')
print(df1)
print(df2)
ddf1 = df1.iloc[:,0]
ddf2 = df2.iloc[:,0]
pindex = ddf1[ddf1.isin(ddf2)]
print(pindex.index)
这给了我:
Int64Index([0, 4, 5, 7, 8, 9], dtype='int64')
但是我找不到使用这个索引映射和构建数组的方法。举个例子,我希望有一个向量,它的元素数量与df1相同,但在索引位置上有来自df2的Val1值,在其他地方都是零。所以它应该是这样的:
0.234
0
0
0
0.222
0.001
0
0.006
0.134
0.034
0
或者另一个映射问题。如何使用这样的索引将df1中冒号"Val"的值映射到一个向量中,该向量在索引行处包含df1中的Val,在其他位置包含零。所以这次应该是这样的:
0.091941
0.0
0.0
0.0
0.035609
0.000637
0.0
0.000876
0.023878
0.004371
0.0
你知道如何以高效优雅的方式做到这一点吗?
谢谢你的帮助!
第一个问题
df2.set_index('NameSP')['Val1'].reindex(df1['NameSP']).fillna(0)
第二个问题
df1['Val1'].where(df1['NameSP'].isin(df2['NameSP']), 0)