我有2个数据帧,长度相同,但大小不同。
基本上,我想通过使用df1 ['Data1']中的值作为列输入来选择ref_df中的值。
下面,您可以看到我的解决方案,但是有没有一种方法可以不使用.ix或不使用for循环呢?另外,如果我的索引是日期时间索引而不是['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
----------
答案 0 :(得分:0)
如果columns
中的df1
按照ref_df
index
和columns
的顺序排列,则可以将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
如果未对齐,请根据ref_df
更改df1
中的顺序并使用。
或直接使用lookup
:
df1['Derived'] = ref_df.lookup(df1['Data'], df1['Data1'])