我有一个像这样的 Pandas 数据框:
dx1 dx2 dx3 dx4 dx5 dx6 dx7
0 25041 40391 5856 0 V4511 V5867 30000
1 25041 40391 25081 5856 5363 3572 0
2 25041 40391 42822 0 5856 0 0
3 25061 40391 0 0 0 0 0
4 25041 40391 0 5856 25081 V4511 25051
我想为 25041,40391,5856 等单元格值创建其他列。因此,如果 25041 出现在任何 dxs 列的特定行中,则将有一个值为 1 或 0 的列 25041。我正在使用此代码并且它有效。
X11['25041'] = X11.isin(['25041']).any(1).astype(int)
但是单元格中有很多值,我想为每个值创建相似的列。为此,我想使用 for LOOP。我做了以下事情:
1) 从数据框创建一个 numpy 矩阵
mat = X11.as_matrix(columns=None)
2) 计算单元格值的唯一出现次数
values, counts = np.unique(mat.astype(str), return_counts=True)
3) 但是当我尝试运行这段代码时,它并没有像预期的那样吐出正确的列:
for x in np.nditer(values):
print (x)
X11['x'] = X11.isin(['x']).any(1).astype(int)
print(x) 打印所有唯一的单元格值。但是只有一个新列 x 在 X11 数据框中附加了 0 值。
然而,当我像这样对每个单元格值手动进行逐一操作时,我会将新列添加到数据框中。
X11['5856'] = X11.isin(['5856']).any(1).astype(int)
我有数百个单元格值,因此我无法手动完成。有什么想法吗?
最佳答案
for 循环中的 x 作为字符串而不是变量。
for x in values:
print (x)
X11[x] = X11.isin([x]).any(1).astype(int)
你应该这样做。
关于python - 通过遍历 Pandas 数据框中的行来创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33422356/