pandas.DataFrame.reindex_like() 是一个方便的方法,用于将一个 DataFrame 的索引和列对齐到另一个 DataFrame 的结构上。reindex_like 是 pandas 中用于数据对齐和结构统一的重要工具,它能够帮助高效地处理不同结构 DataFrame 之间的数据操作。本文主要介绍一下Pandas中pandas.DataFrame.reindex_like方法的使用。

DataFrame.reindex_like(self: ~FrameOrSeries, other, method: Union[str, NoneType] = None, copy: bool = True, limit=None, tolerance=None) → ~FrameOrSeries       [source]

返回具有匹配索引的对象作为其他对象。

使对象在所有轴上都具有相同的索引。可选的填充逻辑,将NaN放在上一个索引中没有值的位置。除非新索引等于当前索引并且copy=False,否则将生成一个新对象。

参数:

other:相同数据类型的Object

它的行和列索引用于定义此对象的新索引。

method

{None, ‘backfill’/’bfill’

‘pad’/’ffill’, ‘nearest’}

方法,用于填充重新索引的数据格式中的漏洞。

请注意:这只适用于

索引为单调递增/递减的DataFrames/Series

1)None (default): 不填补空白。

2)pad / ffill: 将上一个有效观察值传播到

下一个有效观察值。

3)backfill / bfill: 使用下一个有效观察值来填补空白。

4)nearest: 使用最近的有效观测值来填补空白。

copybool,默认为True

即使传递的索引相同,也返回一个新对象。

limitint, 默认为 None

填写不完全匹配的连续标签的最大数量。

tolerance:可选

最大距离之间的原始和新标签不准确的匹配。

匹配位置的索引值最满足等式

abs(index[indexer] - target) <= tolerance

tolerance可以是标量值,

它对所有值应用相同的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)

推荐文档

相关文档

大家感兴趣的内容

随机列表