基于重复索引的数据框,Pandas如何创建多个数据框。

5
如果我有一个数据框在索引上存在重复,我该如何创建一个没有索引重复的数据框集合?
更具体地说,给定数据框:
   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个回答

3
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
使用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

Or convert to list of DataFrames:

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
谢谢!这是一个不错的解决方案。 - Jim Eisenberg

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]

1
谢谢!我接受了,因为它会自动排序索引并立即输出为列表 :P - Jim Eisenberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接