通过迭代pandas dataframe

时间:2015-10-29 18:49:41

标签: 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列中的特定行中,则会有一个值为250或0的列25041。我正在使用此代码,它可以工作。

X11['25041'] = X11.isin(['25041']).any(1).astype(int)

但是单元格中有很多值,对于每个值我想创建类似的列。为此,我想使用一个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)

我有数百个单元格值因此我不能手动完成。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你将for循环中的x作为字符串而不是变量。

for x in values:
    print (x)
    X11[x] = X11.isin([x]).any(1).astype(int)

那应该做你。