通过切片组合行

时间:2017-10-31 19:30:03

标签: python list pandas

我有以下数据框,我想根据行的索引将多行合并为一行,这些行存储在列表中。

df
    Column1
  0 ABC
  1 123
  2 DEF
  3 456
  4 GHI
  5 789
  6 JKL
  7 012
indexes = [[0,3],[4,7]]

首选输出(如果所有项目合并为一列,则可以):

dfn
  Column1
1 ABC 123 DEF 456
2 GHI 789 JKL 012

我找到了这个帖子:How to combine rows in pandas但它只适用于组合两行(在我的数据框中,有时候我可能会组合20-30行)。

2 个答案:

答案 0 :(得分:3)

idxs = [np.r_[i:j+1] for i, j in indexes]

pd.DataFrame([df.iloc[i].values.T.ravel() for i in idxs])

     0    1    2    3
0  ABC  123  DEF  456
1  GHI  789  JKL  012

以下是不等切片的示例:

indexes = [[0,2], [4,7]]
pd.DataFrame([df.iloc[np.r_[i:j+1]].values.T.ravel() for i, j in indexes])

     0    1    2     3
0  ABC  123  DEF  None
1  GHI  789  JKL   012

答案 1 :(得分:1)

使用IntervalIndex

index = pd.IntervalIndex.from_arrays([0,4],[3,7],closed='both')
G=pd.DataFrame(data=list(range(len(index))),index=index)
df['G']=G.loc[df.index].values
df.groupby('G').Column1.apply(list)
Out[449]: 
G
0    [ABC, 123, DEF, 456]
1    [GHI, 789, JKL, 012]
Name: Column1, dtype: object

另外,使用

创建indexes
indexes = np.array([[0,3],[4,7]])
indexes=indexes.T
Out[453]: 
array([[0, 4],
       [3, 7]])

然后,您可以更改

index = pd.IntervalIndex.from_arrays(indexes[0],indexes[1],closed='both')