如何在panda中通过匹配数据帧中的字符串来使用索引



我试图解决以下问题。我有两个数据集,比如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)

最新更新