【发布时间】:2017-07-12 15:24:43
【问题描述】:
问题
从由 dim_df 行组成的 pandas 数据框 df 开始,我需要一个新的
数据帧df_new 通过对每个子数据帧 获得dim_blk 维度的函数,理想情况下从最后一行开始拆分(因此第一个块,而不是最后一个块,可能有或行数不正确,dim_blk),以最有效的方式(可能是矢量化的?)。
示例
在以下示例中,数据框由几行组成,但真正的数据框将由数百万行组成,这就是我需要一个高效解决方案的原因。
dim_df = 7 # dimension of the starting dataframe
dim_blk = 3 # number of rows of the splitted block
df = pd.DataFrame(np.arange(1,dim_df+1), columns=['TEST'])
print(df)
输出:
TEST
0 1
1 2
2 3
3 4
4 5
5 6
6 7
我想要的分割块:
1 # note: this is the first block composed by a <= dim_blk number of rows
2,3,4
5,6,7 # note: this is the last block and it has dim_blk number of rows
我已经这样做了(我不知道这是否是有效的方法):
lst = np.arange(dim_df, 0, -dim_blk) # [7 4 1]
lst_mod = lst[1:] # [4 1] to cut off the last empty sub-dataframe
split_df = np.array_split(df, lst_mod[::-1]) # splitted by reversed list
print(split_df)
输出:
split_df: [
TEST
0 1,
TEST
1 2
2 3
3 4,
TEST
4 5
5 6
6 7]
例如:
print(split_df[1])
输出:
TEST
1 2
2 3
3 4
如何获得一个新的数据框 df_new,其中每一行由两列组成,min 和 max(只是一个示例) 为每个块计算?
即:
# df_new
Min Max
0 1 1
1 2 4
2 5 7
谢谢,
吉尔伯托
【问题讨论】:
标签: python function pandas numpy split