我在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 |
有什么建议吗?
我在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
让我们在该示例中添加一个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]