Python 3.x 比较panda数据帧索引并更新行

Python 3.x 比较panda数据帧索引并更新行,python-3.x,pandas,Python 3.x,Pandas,我有两个excel文件,我读熊猫。我将文件1中的索引与文件2中的索引进行比较(长度不相同(例如:10100),如果它们匹配,则第二个文件中的行[index]将为零,否则不会更改。我使用for和if循环进行此操作,但我要处理的数据越多(1e3,5e3),运行时间会变长。那么,有没有更好的方法来执行这种比较呢?下面是我使用的示例 df = pd.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]], index=[4, 5,

我有两个excel文件,我读熊猫。我将文件1中的索引与文件2中的索引进行比较(长度不相同(例如:10100),如果它们匹配,则第二个文件中的行[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
(必要时将
索引
转换为
系列
,以避免
值错误:数组条件必须与自身形状相同
):

或者,如果想要提高性能,请:

arr = np.where(df.index.isin(df1.index)[:, None], 0, df)
df = pd.DataFrame(arr, index=df.index, columns=df.columns)
print(df)
    A   B   C
4   0   0   0
5   0   0   0
6  10  20  30

此处不需要循环,您可以通过使用将值设置为每行
0
(必要时将
索引
转换为
系列
,以避免
值错误:数组条件必须与自身形状相同
):

或者,如果想要提高性能,请:

arr = np.where(df.index.isin(df1.index)[:, None], 0, df)
df = pd.DataFrame(arr, index=df.index, columns=df.columns)
print(df)
    A   B   C
4   0   0   0
5   0   0   0
6  10  20  30