比较熊猫数据帧索引并更新行

问题描述 投票:0回答:1

我有两个熊猫读取的Excel文件。我正在比较文件1中的索引和文件2中的索引(长度不相同(例如:10,100),如果它们匹配,则第二个文件中的row [index]将为零,否则将保持不变。 for和if为此循环,但是我要处理的数据越多(1e3,5e3),运行时间就会变长。那么,有没有更好的方法进行这种比较?这是我正在使用的示例。

df = pd.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]],
                  index=[4, 5, 6], columns=['A', 'B', 'C'])
df1 = pd.DataFrame([['w'], ['y' ], ['z']],
                  index=[4, 5, 1])
for j in df1.index:
    for i in df.index:
        if i == j:
            df.loc[i, :] = 0
        else:
            df.loc[i, :] = df.loc[i, :]
print(df)
python-3.x pandas
1个回答
2
投票

这里不需要循环,您可以将0DataFrame.mask设置为每行DataFrame.mask的值(为避免Series.isin,必须将Series.isin转换为index):

Series

或者如果要提高性能,则使用ValueError: Array conditional must be same shape as selfdf = df.mask(df.index.to_series().isin(df1.index), 0)

Index.isin
© www.soinside.com 2019 - 2024. All rights reserved.