这是我的起始数据框:
StartDF = pd.DataFrame({'A': {0: 1, 1: 1, 2: 2, 3: 4, 4: 5, 5: 5, 6: 5, 7: 5}, 'B': {0: 2, 1: 2, 2: 4, 3: 2, 4: 2, 5: 4, 6: 4, 7: 5}, 'C': {0: 10, 1: 1000, 2: 250, 3: 100, 4: 550, 5: 100, 6: 3000, 7: 250}})
我需要根据A列和B列中的重复值创建单个数据帧的列表,因此它应如下所示:
df1 = pd.DataFrame({'A': {0: 1, 1: 1}, 'B': {0: 2, 1: 2}, 'C': {0: 10, 1: 1000}})
df2 = pd.DataFrame({'A': {0: 2}, 'B': {0: 4}, 'C': {0: 250}})
df3 = pd.DataFrame({'A': {0: 4}, 'B': {0: 2}, 'C': {0: 100}})
df4 = pd.DataFrame({'A': {0: 5}, 'B': {0: 2}, 'C': {0: 550}})
df5 = pd.DataFrame({'A': {0: 5, 1: 5}, 'B': {0: 4, 1: 4}, 'C': {0: 100, 1: 3000}})
df6 = pd.DataFrame({'A': {0: 5}, 'B': {0: 5}, 'C': {0: 250}})
我已经看到很多答案解释了如何重复DROP,但是我需要保留重复值,因为C列中的信息通常在行之间是不同的,无论A和B列是否重复。需要在新数据帧中保留行数据。
另外请注意,起始数据帧(StartDF)的长度会发生变化,因此每次运行时,创建的各个数据帧的数量都是可变的。最终,我需要将新创建的数据帧打印到他们自己的csv文件中(我知道如何做这部分)。只需要知道如何以优雅的方式从原始数据框中分解数据。
答案 0 :(得分:1)
您可以使用groupby
,遍历每个组并使用列表推导构建列表。
df_list = [g for _, g in df.groupby(['A', 'B'])]
print(*df_list, sep='\n\n')
A B C
0 1 2 10
1 1 2 1000
A B C
2 2 4 250
A B C
3 4 2 100
A B C
4 5 2 550
A B C
5 5 4 100
6 5 4 3000
A B C
7 5 5 250