我有一个Pandas数据帧,每行包含一个名称,列中有许多数字。在为每一行指定索引(在每一行中唯一计算)之后,我希望将该行中的所有剩余值设置为0。在
因此,我尝试了一些方法,并获得了以下工作代码:
for i in range(n):
index = np.where(df.columns == df['match_this_value'][i])[0].item()
df.iloc[i, index] = df['take_this_value'][i].day
df.iloc[i, (index+1):] = 0
但是,由于我的数据集非常大,这需要相当长的时间。我的示例数据集的运行时间大约为70秒,因为我的整个数据集要长得多。有没有更快的方法?此外,有没有更好的方法在不遍历每行的情况下进行这种操作?在
编辑: 对不起,我应该指定索引是如何计算的。该指数通过其中np通过将dataframe的所有列(对于每一行)与一个特定列进行比较并找到匹配项。比如说:
^{pr2}$一旦有了这个索引,我就将该列的值设置为df中另一列的值。现在整个代码如下所示:
for i in range(n):
index = np.where(df.columns == df['match_this_value'][i])[0].item()
df.iloc[i, index] = df['take_this_value'][i].day
df.iloc[i, (index+1):] = 0
考虑以下方法:
在我的机器上运行1000万行的时间大约是秒。在
你可以:
所以这里包含一个布尔掩码
df_indexes>indexes[:, None]
,这里的indexes
将被替换为“特定索引”相关问题 更多 >
编程相关推荐