我在Pandas中有一个数据帧,在col1中有重复的值:

Col1
a
a
b
a
a
b

我想要做的是将这个df分成不同的df-s,每个df-s中都有唯一的col1值.

DF1:

Col1
a
b

DF2:

Col1
a
b

DF3:

Col1
a

DF4:

Col1
a

有什么建议吗?

推荐答案

我不认为你可以通过矢量的方式来实现这一点.

一种可能性是使用自定义函数来迭代项并跟踪唯一项.然后使用此命令拆分groupby:

def cum_uniq(s):
    i = 0
    seen = set()
    out = []
    for x in s:
        if x in seen:
            i+=1
            seen = set()
        out.append(i)
        seen.add(x)
    return pd.Series(out, index=s.index)

out = [g for _,g in df.groupby(cum_uniq(df['Col1']))]

输出:

[  Col1
 0    a,
   Col1
 1    a
 2    b,
   Col1
 3    a,
   Col1
 4    a
 5    b]

中级:

cum_uniq(df['Col1'])

0    0
1    1
2    1
3    2
4    3
5    3
dtype: int64
if order doesn't matter

让我们在该示例中添加一个Col2:

  Col1  Col2
0    a     0
1    a     1
2    b     2
3    a     3
4    a     4
5    b     5

前面的代码提供:

[  Col1  Col2
 0    a     0,
   Col1  Col2
 1    a     1
 2    b     2,
   Col1  Col2
 3    a     3,
   Col1  Col2
 4    a     4
 5    b     5]

如果顺序不重要,您可以将其矢量化:

out = [g for _,g in df.groupby(df.groupby('Col1').cumcount())]

输出:

[  Col1  Col2
0    a     0
2    b     2,
   Col1  Col2
1    a     1
5    b     5,
   Col1  Col2
3    a     3,
   Col1  Col2
4    a     4]

Python相关问答推荐

理解Python的二分库:澄清bisect_left的使用

Pydantic 2.7.0模型接受字符串日期时间或无

如何在Windows上用Python提取名称中带有逗号的文件?

如果值不存在,列表理解返回列表

Julia CSV for Python中的等效性Pandas index_col参数

如何请求使用Python将文件下载到带有登录名的门户网站?

try 将一行连接到Tensorflow中的矩阵

形状弃用警告与组合多边形和多边形如何解决

Django—cte给出:QuerySet对象没有属性with_cte''''

如何使用Numpy. stracards重新编写滚动和?

matplotlib + python foor loop

从列表中获取n个元素,其中list [i][0]== value''

将一个双框爆炸到另一个双框的范围内

将CSS链接到HTML文件的问题

我什么时候应该使用帆布和标签?

Pandas:将值从一列移动到适当的列

时长超过24小时如何从Excel导入时长数据

如何在Python中创建仅包含完整天数的月份的列表

时间戳上的SOAP头签名无效

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()