首页 > 解决方案 > Pandas 数据框更新行

问题描述

假设我有一个数据框 X,它以 0 和维度 mx n 开头。我在一个长度为 m 的 pandas.series Y 中有 n 个唯一值 (1,2,3,...,n)。如何在不使用循环的情况下有效地设置 X 的第 i 行的 Y[i] 列(将 0 更改为 1)。特别是对于大的 m 和 n。

For example, for Y = [3,2,1]
X
row     1       2      3
0       0       0      0
1       0       0      0
2       0       0      0

to
row     1       2      3
0       0       0      1
1       0       1      0
2       1       0      0

标签: pythonpandas

解决方案


我不确定你为什么反对 for 循环。这应该是相当有效的。

for row, col in enumerate(Y):
    df.iat[n, col] = 1

您还可以计算索引位置并将它们的值设置为 1,然后将结果重塑为m x n矩阵的形状。

Y = [3, 2, 1]
n = 5
m = len(Y)
locations = set(row * n + col for row, col in enumerate(Y))
df = pd.DataFrame(
    np.array([1 if idx in locations else 0 for idx in range(m * n)]).reshape((m, n))
)
>>> df
   0  1  2  3  4
0  0  0  0  1  0
1  0  0  1  0  0
2  0  1  0  0  0

推荐阅读