我有一个很大的 Dataframe ,我需要在其中迭代地执行一些计算,并设置 Dataframe 的子集,如下面的示例所示。下面的示例有索引1000 x 100,但在我的真实的数据集中,[100]不是固定的。有时更多,有时更少。另一个复杂的是,在我的真实数据集中,df.loc[0]._is_view
返回False(不知道为什么)。
因此,即使df.loc[0, 'C']
下面的第一个选项更快,我也不能真正使用它。我一直在使用第二个选项df.loc[df.index.get_level_values('A') == 0, 'C']
,它需要两倍的时间。
有人知道编辑 Dataframe 子集的更快方法吗?
import pandas as pd
df = pd.DataFrame(
np.random.normal(0.0, 1.0, size=(100000, 2)),
index=pd.MultiIndex.from_product(
[list(range(1000)), list(range(100))], names=["A", "B"]
),
columns=["C", "D"],
)
%%timeit
df.loc[0, 'C'] = 1.
870 µs ± 91.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.loc[df.index.get_level_values('A') == 0, 'C'] = 1.
1.41 ms ± 4.71 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
1条答案
按热度按时间0pizxfdo1#
loc
的另一个替代方法是Pandas at属性,在大多数情况下,它应该更快:鉴于: