我有数据集:
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
答案 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