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

Pandas 如何在熊猫中通过匹配数据帧中的字符串来使用索引,pandas,indexing,mapping,Pandas,Indexing,Mapping,我试图解决以下问题。我有两个数据集,比如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

我试图解决以下问题。我有两个数据集,比如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,'exact')。我可以使用.iloc和.isin正确地获取索引,如下代码所示:

import pandas as pd
import numpy as np

df1 = pd.read_excel('C:\PYTHONCODES\LINEAROPT\TEST_DATA1.xlsx')
df2 = pd.read_excel('C:\PYTHONCODES\LINEAROPT\TEST_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)
第二个问题

df2.set_index('NameSP')['Val1'].reindex(df1['NameSP']).fillna(0)
df1['Val1'].where(df1['NameSP'].isin(df2['NameSP']), 0)

好极了这对于第一个问题非常有效。谢谢第二个也很完美。非常感谢!第二个问题的df1或df2的len?