DataFrame.reindex_like(self: ~FrameOrSeries, other, method: Union[str, NoneType] = None, copy: bool = True, limit=None, tolerance=None) → ~FrameOrSeries [source]
返回具有匹配索引的对象作为其他对象。
使对象在所有轴上都具有相同的索引。可选的填充逻辑,将NaN
放在上一个索引中没有值的位置。除非新索引等于当前索引并且copy=False
,否则将生成一个新对象。
参数: | other:相同数据类型的 它的行和列索引用于定义此对象的新索引。 method:
方法,用于填充重新索引的数据格式中的漏洞。 请注意:这只适用于 索引为单调递增/递减的 1)None (default): 不填补空白。 2)pad / ffill: 将上一个有效观察值传播到 下一个有效观察值。 3)backfill / bfill: 使用下一个有效观察值来填补空白。 4)nearest: 使用最近的有效观测值来填补空白。 copy: 即使传递的索引相同,也返回一个新对象。 limit: 填写不完全匹配的连续标签的最大数量。 tolerance:可选 最大距离之间的原始和新标签不准确的匹配。 匹配位置的索引值最满足等式
tolerance可以是标量值, 它对所有值应用相同的 也可以是类似于列表的值, 它对每个元素应用可变 类列表包括列表、元组、数组、序列, 并且必须与索引大小相同, 其dtype必须与索引的类型完全匹配。 0.21.0版本中新增内容:(list-like tolerance) |
返回值: | Series 或 DataFrame: 与调用者相同的类型, 但每个轴上的索引均已更改。 |
Notes
与调用.reindex(index=other.index, columns=other.columns,...)
相同。
例子
1)将一个 DataFrame 的索引和列对齐到另一个 DataFrame
import pandas as pd import numpy as np df1 = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'], index=['x', 'y']) df2 = pd.DataFrame([[5, 6, 7]], columns=['A', 'B', 'C'], index=['y']) # 让 df1 的结构与 df2 对齐 result = df1.reindex_like(df2) print(result)
2)配合填充方法使用
import pandas as pd import numpy as np df3 = pd.DataFrame([[np.nan, 2], [3, 4]], columns=['A', 'B'], index=['x', 'y']) df_like = pd.DataFrame([[0, 0]], columns=['A', 'B'], index=['x']) print(df3.reindex_like(df_like, method='ffill'))
3)使用 reindex_like()
对齐两个 DataFrame 的结构
import pandas as pd # 原始 DataFrame df1,包含三列数据,按日期索引 df1 = pd.DataFrame([[24.3, 75.7, 'high'], [31, 87.8, 'high'], [22, 71.6, 'medium'], [35, 95, 'medium']], columns=['temp_celsius', 'temp_fahrenheit', 'windspeed'], index=pd.date_range( start='2014-02-12', end='2014-02-15')) # df2 只有部分列和部分索引 df2 = pd.DataFrame([[28, 'low'], [30, 'low'], [35.1, 'medium']], columns=['temp_celsius', 'windspeed'], index=pd.DatetimeIndex(['2014-02-12', '2014-02-13', '2014-02-15'])) # 将 df2 的索引和列结构重新对齐为与 df1 一致 aligned_df = df2.reindex_like(df1) # 输出结果 print(aligned_df)