首页 > 解决方案 > 如何有效地传输数据框中的值?

问题描述

我想问一下,是否有比逐个输入所有单元格位置更有效的方法在数据框中传输值。

假设有一组具有某些输入的单元格 (120, 50:100),而还有另一组空单元格 (0:50, 110)。两组单元格的大小均为 50 * 1(总共 50 个单元格),但列数和行数不同。

在这种情况下,我想进行两个转换:

第一次转换:
将单元格 (120, 50:100) 中的输入转移到单元格 (0:50, 110),使得单元格 (0, 110) = 单元格 (120, 50),单元格 (1, 110) = 单元格 ( 120, 51), ..., 单元格 (49, 110) = 单元格 (120, 99)。

第二次变换:
将单元格 (120, 50:100) 中的输入转移到单元格 (0:50, 110) 中,使得单元格 (0, 110) = 单元格 (120, 99),单元格 (1, 110) = 单元格 ( 120, 98), ..., 单元格 (49, 110) = 单元格 (120, 50)

除了df.iloc[a, b] = df.iloc[c, d]在每个转换中直接通过命令分配所需的值 50 次之外,还有没有更有效的方法来执行上述转换。非常感谢。

标签: pythonpandasdataframe

解决方案


替换 using iloc, iedf.iloc[:50, 110] = df.iloc[120, 50:100]可能不起作用,因为iloc在这种情况下返回 aSeries并且Series记住索引(在这种情况下为列名)。在这种情况下,assignmen 运算符=总是替换相同索引的元素。因此,由于两个系列的索引不同(df.iloc[:50, 110]以行名或索引作为索引,df.iloc[120, 50:100]以列名或索引作为索引)替换出错。

如果您打印df.iloc[:50, 110].index和 ,您可以看到这一点df.iloc[120, 50:100].index。仅在那些索引匹配的地方进行替换,这不太可能是您的情况。

为了实现你想要的,你可以使用底层numpy数组,它不会对索引进行任何检查。

df.values[:50, 110] = df.values[120, 50:100]

并颠倒分配的顺序:

df.values[:50, 110] = df.values[120, 50:100:-1]

推荐阅读