Pandas 中的索引错误
Indexing Error in Pandas
我无法找出索引中的错误。我相信这一定是个愚蠢的错误。我想将这些行的 'td' 值设置为 0,其 'block' 大小为 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 NaN
4 2 214662742 5 41.759
5 2 214662742 5 78.073
6 3 214576500 6 NaN
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
这就是你做作业的方式:
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
转换returns一个与数据帧长度相同的序列。然后找到等于1的那些,并使用loc
将那些索引位置的列td
设置为零值。
我无法找出索引中的错误。我相信这一定是个愚蠢的错误。我想将这些行的 'td' 值设置为 0,其 'block' 大小为 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 NaN 4 2 214662742 5 41.759 5 2 214662742 5 78.073 6 3 214576500 6 NaN 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
这就是你做作业的方式:
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
转换returns一个与数据帧长度相同的序列。然后找到等于1的那些,并使用loc
将那些索引位置的列td
设置为零值。