在循环内重新索引数据帧

Posted

技术标签:

【中文标题】在循环内重新索引数据帧【英文标题】:Reindex dataframe inside loop 【发布时间】:2021-07-23 09:41:41 【问题描述】:

我正在尝试重新索引循环内一组数据帧中的列。这似乎只在循环之外起作用。请参阅下面的示例代码

import pandas as pd

data1 = [[1,2,3],[4,5,6],[7,8,9]]
data2 = [[10,11,12],[13,14,15],[16,17,18]]
data3 = [[19,20,21],[22,23,24],[25,26,27]]
index = ['a','b','c']
columns = ['d','e','f']

df1 = pd.DataFrame(data=data1,index=index,columns=columns)
df2 = pd.DataFrame(data=data2,index=index,columns=columns)
df3 = pd.DataFrame(data=data3,index=index,columns=columns)

columns2 = ['f','e','d']

for i in [df1,df2,df3]:
    i = i.reindex(columns=columns2)

print(df1)

df2 = df2.reindex(columns=columns2)

print(df2)

df1 没有根据需要重新索引,但是如果我在循环之外重新索引 df2 它可以工作。这是为什么呢?

谢谢 安德鲁

【问题讨论】:

【参考方案1】:

发生这种情况的原因与发生这种情况的原因相同:

a = 5
b = 6
for i in [a, b]:
    i = 4

>>> a
    5

为什么?见this accepted answer。

关于您的问题,一种解决方法是创建一个 list 的重新索引数据帧,如下所示:

reindexed_dfs = [df.reindex(columns=columns2) for df in [df1, df2, df3]]

然后重新分配df1df2df3。但最好还是继续使用新创建的列表。

【讨论】:

非常感谢@Camilo Martinez。那是一种享受,并且有关于处理变量的最佳方法的丰富背景。

以上是关于在循环内重新索引数据帧的主要内容,如果未能解决你的问题,请参考以下文章

重新索引 MultiIndex 数据帧的特定级别

Pandas:在多索引数据帧中重新索引和插值

使用来自另一个数据帧的代码重新索引数据帧

使用时间序列重新索引数据帧

重新启动时如何使这个 CSS 关键帧动画平滑?

为啥我收到此错误“ValueError:无法从重复轴重新索引”?