我有两个熊猫读取的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)
答案 0 :(得分:2)
这里不需要循环,您可以将DataFrame.mask
和Series.isin
设置为每行0
的值(为避免{,必须将index
转换为Series
{1}}):
ValueError: Array conditional must be same shape as self
或者如果需要提高性能,则使用Index.isin
和numpy.where
:
df = df.mask(df.index.to_series().isin(df1.index), 0)