python - 将 numpy 数组分配给 pandas 掩码

标签 python pandas mask

我在 pandas 屏蔽子集上执行了一项任务:

pdxy = pd.DataFrame(data,columns=['X','Y','C','CC'])
mask = pdxy[:]['Y']==8

print("pdxy[mask]")
print(pdxy[mask][:10])

pdxy[mask]
       X  Y  C  CC
17    17  8  0   0
18    18  8  0   0
48    48  8  0   0
56    56  8  0   0
63    63  8  0   0
66    66  8  0   0
73    73  8  0   0
87    87  8  0   0
103  103  8  0   0
116  116  8  0   0

kmeans = KMeans(n_clusters=5,random_state=0).fit(pdxy[mask]['X','Y'])

之后我想将结果(簇和簇中心)分配给 pandas 数据框中的列:

pdxy.loc[mask]['C']  = np.array(kmeans.labels_)
pdxy.loc[mask]['CC'] = np.array(kmeans.cluster_centers_[kmeans.labels_])[:,0]

不幸的是,DataFrame 没有被修改,即与分配之前一样:

print("pdxy[mask] labeled")
print(pdxy[mask][:10]) 

pdxy[mask] labeled
       X  Y  C  CC
17    17  8  0   0
18    18  8  0   0
48    48  8  0   0
56    56  8  0   0
63    63  8  0   0
66    66  8  0   0
73    73  8  0   0
87    87  8  0   0
103  103  8  0   0
116  116  8  0   0

我能做什么?

最佳答案

使用 .loc 访问行+列是用逗号完成的,如 [row, col] 而不是 [row][col]

试试这个:

import numpy as np
import pandas as pd

pdxy = pd.DataFrame(data, columns=['X', 'Y', 'C', 'CC'])
mask = pdxy[:]['Y'] == 8

kmeans = KMeans(n_clusters=5,random_state=0).fit(pdxy[mask]['X','Y'])

pdxy.loc[mask, 'C']  = np.array(kmeans.labels_)
pdxy.loc[mask, 'CC'] = np.array(kmeans.cluster_centers_[kmeans.labels_])[:,0]

print("pdxy[mask] labeled")
print(pdxy[mask][:10]) 

关于python - 将 numpy 数组分配给 pandas 掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56838500/

相关文章:

python - 如何查询具有 ENUM 列的表并保留 ENUM 类型?

javascript - 读写 DOCX 文件

python - 根据时间条件获取每个组的最大值

python - Pandas - 跳过 numpy 数组中给定的行数

python - Pandas - DF 与列表 - 查找与任何列中的字符串匹配的所有行

python - 添加 numpy 零数组和屏蔽数组

opencv - 如何使用OpenCV在RGB顶部叠加RGBA图像

python - 在pygame中使用线程

ios - 在 iOS 中对 blurView 应用蒙版

python - pandas 为每个 DatetimeIndex 条目获取第一个过滤行的有效方法