我有以下数据框,我想根据行的索引将多行合并为一行,这些行存储在列表中。
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行)。
答案 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')