我有一个熊猫数据框,其中的行数少于30K,列数为7,我正在尝试使第4列与第五列相关。问题是,我想对海量数据集执行此操作,但是这需要40秒钟才能运行。这是我的代码:

df_a = dfr[['id', 'state', 'perform', 'A']].groupby(['id', 'state']).corr().ix[1::2][['A']].reset_index(2).drop('level_2', axis=1)
df_b = dfr[['id', 'state', 'perform', 'B']].groupby(['id', 'state']).corr().ix[1::2][['B']].reset_index(2).drop('level_2', axis=1)
df_c = dfr[['id', 'state', 'perform', 'C']].groupby(['id', 'state']).corr().ix[1::2][['C']].reset_index(2).drop('level_2', axis=1)
df_d = dfr[['id', 'state', 'perform', 'D']].groupby(['id', 'state']).corr().ix[1::2][['D']].reset_index(2).drop('level_2', axis=1)

df = df_a.merge(df_b, left_index=True, right_index=True)
df = df.merge(df_c, left_index=True, right_index=True)
df = df.merge(df_d, left_index=True, right_index=True)


样本数据如下所示:

ID   State   perform   A   B   C   D
234   AK     75.8456   1   0   0   0
284   MN     78.6752   0   0   1   0


有人对我如何使它更快或更有效地实现此方法有任何提示吗?

谢谢!

最佳答案

pandas corr非常慢的原因是它考虑了NAN:它基本上是一个cython for循环。

如果您的数据没有NAN,则numpy.corrcoef更快。

07-24 09:51