python - 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
解决方案
我不确定你为什么反对 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
推荐阅读
- c++ - 在存储在 std::vector 中的小端和大端值之间进行转换
- reactive-programming - 使用 2 个嵌套订阅返回 Mono/Flux
- c# - 有什么简单的方法可以在不进行反序列化的情况下从 json 中找出最低值 c#
- swift - \。Swift 中的运算符
- installation - 运行 Anaconda3 安装 bash 脚本失败
- selenium - 使用 xPath (Selenium, Python) 找到 Tweet 'like' 按钮
- angular - Angular Forms - 如何通过其 ID 编辑(修补)现有记录
- docker - 项目包括多个 Dockerfile 和共享一些文件的应用程序。如何构建它?
- java - 我在为 DAO 中的具体查询制作 AsynchTask 时遇到问题
- node.js - Node.js 应用程序 - 单个目录中的多个服务