python - 通过遍历 Pandas 数据框中的行来创建新列

标签 python numpy pandas

我有一个像这样的 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/

相关文章:

python - 使用必须在另一列的特定行上计算的公式填充值为 0 或 NaN 的 Pandas 数据框行

python - 类型错误 : cannot concatenate a ninNDFrame object while trying to concat

python - 在子类列表之前要考虑什么?

python - 考虑权重的networkx is_isomorphic

python - 将系列映射到 min(list, key=lambda x : abs(series)) function

python - fmin_slsqp 对同一个系统返回不同的解

python - 使用 scipy/voronoi_plot_2d 在同一窗口中重绘绘图

python - Google App Engine 错误(请求的 URL/未在此服务器上找到)

python - Appengine,python27的性能下降

Python 相当于 R 的 Pandas 数据框列表