gpt4 book ai didi

python - 当行名和列名彼此相等时用零替换值

转载 作者:行者123 更新时间:2023-12-05 05:51:38 24 4
gpt4 key购买 nike

我有以下数据集:

import pandas as pd
import numpy as np

d = {'column1': ['a', 'b', 'c'], 'va1': [10, 8, 6], 'va2': [1, 2, 3], 'vb1': [4, 2, 6], 'vb2': [1, 4, 8], 'vc1': [2, 6, 8], 'vc2': [2, 1, 8] }

data_frame = pd.DataFrame(data=d)

我想要做的是用 0 替换 column1 和其他列值重合的值。所需的数据集如下:

d1 = {'column1': ['a', 'b', 'c'], 'va1': [0, 8, 6],  'va2': [0, 2, 3], 'vb1': [4, 0, 6], 'vb2': [1, 0, 8], 'vc1': [2, 6, 0], 'vc2': [2, 1, 0] }

data_frame1 = pd.DataFrame(data=d1)

因为我的原始数据集很大,所以我想避免使用 groupby 和 melt 命令。例如,一个建议是:将 column1 作为索引,重命名所有列,并在列和索引匹配的地方用 0 替换 ij 元素。以下是我的意思的起始行:

data_frame.set_index('column1', inplace=True)
data_frame.columns=data_frame.columns.str[1:2] # Now column and index has the same strings
# Replace ij elements with 0 where index and column matches.

有什么建议吗?

最佳答案

使用 numpy 广播比较列的第二个值与索引值并在 DataFrame.mask 中设置 0 :

data_frame.set_index('column1', inplace=True)
cols=data_frame.columns.str[1:2]

data_frame = data_frame.mask(data_frame.index.to_numpy()[:, None] == cols.to_numpy(), 0)
print (data_frame)
va1 va2 vb1 vb2 vc1 vc2
column1
a 0 0 4 1 2 2
b 8 2 0 0 6 1
c 6 3 6 8 0 0

关于python - 当行名和列名彼此相等时用零替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70347302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com