3

我无法在索引中找出错误。我相信这一定是一个愚蠢的错误。我想将这些行的“td”值设置为 0,其“块”大小为 1。我首先找出这些行,然后使用这些索引将“td”列的值设置为 0。这是样本数据集。在这里,除了第 5、7、8 号块之外,所有其他块的值都应在“td”列中设置为 0。

    Sid Itemid Block td
0 1 214536502 1 180.591
1 1 214536500 2 37.13
2 1 214536506 3 133.308
3 1 214577561 4 南
4 2 214662742 5 41.759
5 2 214662742 5 78.073
6 3 214576500 6 南
7 4 214821275 7 26.002
8 4 214821275 7 28.199
9 5 214821371 8 42.289
10 5 214821371 8 45.193

这是我的代码。我得到了意想不到的输出。

j=k.groupby('Block').Sid.count()==1
te=k['Block'][j[j].index].index
k['td'][te]=0

预期输出-

    Sid Itemid Block td
0 1 214536502 1 0
1 1 214536500 2 0
2 1 214536506 3 0
3 1 214577561 4 0
4 2 214662742 5 41.759
5 2 214662742 5 78.073
6 3 214576500 6 0
7 4 214821275 7 26.002
8 4 214821275 7 28.199
9 5 214821371 8 42.289
10 5 214821371 8 45.193
4

1 回答 1

2

这是你将如何做的任务:

k.ix[(k.groupby('Block').Sid.transform('count') == 1), 'td'] = 0

>>> k
    Sid     Itemid  Block      td
0     1  214536502      1   0.000
1     1  214536500      2   0.000
2     1  214536506      3   0.000
3     1  214577561      4   0.000
4     2  214662742      5  41.759
5     2  214662742      5  78.073
6     3  214576500      6   0.000
7     4  214821275      7  26.002
8     4  214821275      7  28.199
9     5  214821371      8  42.289
10    5  214821371      8  45.193

Transform 返回一个与数据帧长度相同的序列。然后 find 找到等于 1 的那些,并使用loc将这些索引位置处的列设置td为零值。

于 2016-03-10T20:29:29.810 回答