【发布时间】:2020-12-12 21:04:47
【问题描述】:
我确实有一个 pandas DF (df_main),我尝试将其拆分为不同的子集。数据集如下所示:
a b c d e f
1 1 1 2 1 2 1.
2 3 2 1 2 1 2.
3 1 3 1 3 1 3.
3 2 1 3 4 1 4.
3 1 3 4 2 1 5.
2 1 2 3 4 2 6.
1 2 3 4 5 3 7.
我想根据a列的元素将完整的df拆分为3个子集。
子集 1:col(a) 的值增加,因此 1., 2., 3.
子集 2:col(a) 的值保持不变,因此为 3.、4.、5。
子集 3:col (a) 的值递减,因此 5., 6., 7.
我的代码现在看起来像这样:
df1_new = pd.DataFrame(columns=['a', 'b', 'c', 'd', 'e', 'f'])
df2_new = pd.DataFrame(columns=['a', 'b', 'c', 'd', 'e', 'f'])
df3_new = pd.DataFrame(columns=['a', 'b', 'c', 'd', 'e', 'f'])
for j in range(len(df_main['a'])):
if df_main['a'][j] == df_main['a'][j + 1]:
df1_new = df1_new.append(df_main.iloc[j])
if df_main['a'][j] > df_main['a'][j + 1]:
df2_new = df2_new.append(df_main.iloc[j])
if df_main['a'][j] < df_main['a'][j + 1]:
df3_new = df3_new.append(df_main.iloc[j])
由于 df_main 的长度为 1 353 419 行,它需要 (atm) 大约 15 小时才能完成一次运行。
是否有任何选项可以优化它运行 df 并拆分它所需的时间?
我对 numpy 矢量化有一点看法,但我不确定这是否是一个合适的解决方法。
可以在这里看到基于递增、递减和常量值的模式
【问题讨论】:
-
您的 df 是否总是包含先递增的值,然后是相同的值,然后是递减的值?
-
你好 Shubham,不,它并不总是遵循相同的模式。我将添加模式的可视化。
-
所以你想要一组中所有增加的值,另一组中所有减少的值......,对吗?
-
正确,如果 value[i] == value[i+1] 我想要第三个子集中的数据元组。我的主要问题是运行时,它太长了。
标签: python pandas dataframe optimization