Python 使用pandas.DataFrame.apply查找值并将其替换为来自不同数据帧的值
我有两个具有相同日期时间索引的数据帧 第一个是J:Python 使用pandas.DataFrame.apply查找值并将其替换为来自不同数据帧的值,python,pandas,Python,Pandas,我有两个具有相同日期时间索引的数据帧 第一个是J: A B C 01/01/10 100 400 200 01/02/10 300 200 400 01/03/10 200 100 300 第二个是K: 100 200 300 400 01/01/10 0.05 -0.42 0.61 -0.12 01/02/10 -0.23 0.11 0.
A B C
01/01/10 100 400 200
01/02/10 300 200 400
01/03/10 200 100 300
第二个是K:
100 200 300 400
01/01/10 0.05 -0.42 0.61 -0.12
01/02/10 -0.23 0.11 0.82 0.34
01/03/10 -0.55 0.24 -0.01 -0.73
我想使用J来引用K,并创建第三个数据帧L,如下所示:
A B C
01/01/10 0.05 -0.12 -0.42
01/02/10 0.82 0.11 0.34
01/03/10 0.24 -0.55 -0.01
为此,我需要获取J中的每个值,并在K中查找相应的值,其中列名是相同日期的值
我试着做:
L = J.apply( lambda x: K.loc[ x.index, x ], axis='index' )
但是你可以得到:
ValueError: If using all scalar values, you must pass an index
理想情况下,我希望使用此选项,以使J中包含的任何NaN值保持原样,并且不会在K中查找。我尝试过此选项,但未成功:
L = J.apply( lambda x: np.nan if np.isnan( x.astype( float ) ) else K.loc[ x.index, x ] )
使用和来映射新值,然后使用以下命令将数据帧返回到原始形状:
或与 输出
A B C
01/01/10 0.05 -0.12 -0.42
01/02/10 0.82 0.11 0.34
01/03/10 0.24 -0.55 -0.01
我认为apply
可能是一个不错的选择,但我不确定,
我建议您查看使用和使用来映射新值,然后使用以下命令将数据帧返回到原始形状:
或与 输出
A B C
01/01/10 0.05 -0.12 -0.42
01/02/10 0.82 0.11 0.34
01/03/10 0.24 -0.55 -0.01
我认为apply
可能是一个不错的选择,但我不确定,
我建议您查看使用进行基于标签的索引
# if needed, convert columns of df2 to integers
# K.columns = K.columns.astype(int)
L = J.apply(lambda x: K.lookup(x.index, x))
用于基于标签的索引
# if needed, convert columns of df2 to integers
# K.columns = K.columns.astype(int)
L = J.apply(lambda x: K.lookup(x.index, x))
数据帧J和K具有相同数量的行和列?它们共享相同的索引,因此将具有相同数量的行。但是,J的列数将少于K。请在示例数据中表示这一点。现在它们都有相同数量的列。更新了示例数据。现在应该更清楚了。您的数据帧J和K具有相同数量的行和列?它们共享相同的索引,因此将具有相同数量的行。但是,J的列数将少于K。请在示例数据中表示这一点。现在它们都有相同数量的列。更新了示例数据。现在应该更清楚了。
A B C
01/01/10 0.05 -0.12 -0.42
01/02/10 0.82 0.11 0.34
01/03/10 0.24 -0.55 -0.01