是否有一种方法可以通过从另一个数据框中索引值从数据框中选择值



我有2个数据框,两个相同的长度但尺寸不同。

本质上,我想通过将df1 ['data1']中的值作为列输入选择Ref_df中的值。

下面,您可以看到我的解决方案,但是有没有办法无需使用.ix还是不使用循环?另外,如果我的索引是DateTime索引而不是[11','12','13','14']?

,我该怎么办?
    import pandas as pd 
    import numpy as np 

    data = {'21' : [1,2,3,4], '22' : [5,6,7,8], '23' : [9,10,11,12], '24' : [13,14,15,16]} 
    ref_df = pd.DataFrame(data, index=['11','12','13','14']) 
    df1 = pd.DataFrame({'Data': ['11','12','13','14'],'Data1': ['21','22','23','24']}) 
    for index, row in df1.iterrows(): 
        df1.ix[index, 'Derived'] = ref_df.iloc[ref_df.index.get_loc(row.Data), ref_df.columns.get_loc(row.Data1)]

df1   Data Data1
0   11    21
1   12    22
2   13    23
3   14    24
-----------
ref df     21  22  23  24
11   1   5   9  13
12   2   6  10  14
13   3   7  11  15
14   4   8  12  16
---------
df1   Data Data1  Derived
0   11    21      1.0
1   12    22      6.0
2   13    23     11.0
3   14    24     16.0
----------

如果df1columns按照ref_df indexcolumns为顺序,则可以将ref_df的对角线值呈:

df1['Derived'] = np.diag(ref_df)
print(df1)
  Data Data1  Derived
0   11    21        1
1   12    22        6
2   13    23       11
3   14    24       16

如果不对齐,则根据df1更改ref_df中的顺序。

或直接使用lookup

df1['Derived'] = ref_df.lookup(df1['Data'], df1['Data1'])

相关内容

  • 没有找到相关文章

最新更新