将第一行包含一个的那些列设置零

时间:2019-06-24 18:05:37

标签: python pandas

我有数据集:

id 1 2 3 
1  1 0 1
2  1 1 1
3  0 1 1

为第一行包含1的列设置零的最快方法是什么,以便输出如下所示:

id 1 2 3 
1  0 0 0
2  0 1 0
3  0 1 0

3 个答案:

答案 0 :(得分:4)

您可以尝试:

import RNFetchBlob from `rn-fetch-blob`;
const deserialize = require('./deserialize.js');
const Buffer = require('buffer/').Buffer;

RNFetchBlob.fs.readFile('...', 'base64')
    .then(b64Data => Buffer.from(b64Data, 'base64'))
    .then(bufferData => deserialize(bufferData))
    .then(jsData => {/* Do anything here */})

输出:

df.loc[:, df.columns[df.iloc[0].to_numpy(bool)]] = 0
df

使用 1 2 3 id 1 0 0 0 2 0 1 0 3 0 1 0 选择第一行,然后使用iloc将这些值转换为numpy数组,并将其转换为numpy数组。

接下来,对数据框列标题使用布尔索引,以确定哪些列使用to_numpy将所有值设置为零。

答案 1 :(得分:3)

您可以在此处使用算术。


df.iloc[0].ne(1) * df

   1  2  3
0  0  0  0
1  0  1  0
2  0  1  0

说明

>>> df.iloc[0].ne(1)
1    False
2     True
3    False
Name: 0, dtype: bool

索引对齐将处理其余部分,并将0不满足条件的所有列乘以。这会占用更多的内存,因为它返回了DataFrame的副本,但这仍然是一个巧妙的窍门。

答案 2 :(得分:2)

使用reindex

df.loc[:,df.iloc[0]!=1].reindex(columns=df.columns,fill_value=0)
Out[814]: 
    1  2  3
id         
1   0  0  0
2   0  1  0
3   0  1  0