大熊猫基于重复的索引数据框创建多个数据框

时间:2019-05-23 08:56:29

标签: python python-3.x pandas dataframe

如果索引中有重复项的数据框,如何创建索引中没有重复项的数据框?

更精确地说,给定数据框:

   a  b
1  1  6
1  2  7
2  3  8
2  4  9
2  5  0

我想要一个数据帧列表作为输出:

   a  b
1  1  6
2  3  8


   a  b
1  2  7
2  4  9


   a  b
2  5  0

这需要根据重复项的数量扩展到所需的数据帧。

3 个答案:

答案 0 :(得分:2)

GroupBy.cumcount用于自定义组,然后将组转换为词典:

df = dict(tuple(df.groupby(df.groupby(level=0).cumcount())))
print (df)
{0:    a  b
1  1  6
2  3  8, 1:    a  b
1  2  7
2  4  9, 2:    a  b
2  5  0}

print (dfs[0])
   a  b
1  1  6
2  3  8

或转换为数据框列表:

dfs = [x for i, x in df.groupby(df.groupby(level=0).cumcount())]
print (dfs)
[   a  b
1  1  6
2  3  8,    a  b
1  2  7
2  4  9,    a  b
2  5  0]

答案 1 :(得分:2)

df=df.reset_index()
dfs=[]
while not df.empty:
    dfs.append(df[~df.duplicated('index',keep='first')].set_index('index'))
    df=df[df.duplicated('index',keep='first')]

#dfs will have all your dataframes

答案 2 :(得分:1)

另一种方法是使用pd.DataFrame.groupby.nth

import numpy as np

g = df.groupby(df.index)
cnt = np.bincount(df.index).max()
dfs = [g.nth(i) for i in range(cnt)]

输出:

[  a  b
1  1  6
2  3  8,    
   a  b
1  2  7
2  4  9,
   a  b
2  5  0]