Python如何根据唯一的客户ID将数据框分成两个大小相等的组?

标签 python pandas split dataframe

我有一个包含客户 ID 的交易数据框架,如下所示

ID
1
1
1
2
2
3
3
3
3
4
4

我想随机将此数据集分为另外 2 个数据集(data1data2,它们具有相同数量的唯一数据集ID。重要的是分割是随机的。输出可以如下

对于data1:

ID
2
2
4
4

对于data2:

ID
1
1
1
3
3
3
3

如何在 python/pandas 中轻松地做到这一点? 谢谢。

最佳答案

获取列表中的唯一 ID 并将列表分成两半:

In [28]: import random

In [29]: df
Out[29]: 
    ID
0    1
1    1
2    1
3    2
4    2
5    3
6    3
7    3
8    3
9    4
10   4

In [32]: ids = df.ID.unique()

In [33]: random.shuffle(ids)

In [34]: n = len(ids)

In [35]: ids1, ids2 = ids[:n/2], ids[n/2:]

In [36]: ids1
Out[36]: array([1, 2])

In [37]: ids2
Out[37]: array([3, 4])

In [39]: df1 = df[df.ID.isin(ids1)]

In [40]: df2 = df[df.ID.isin(ids2)]

In [41]: df1
Out[41]: 
   ID
0   1
1   1
2   1
3   2
4   2

In [42]: df2
Out[42]: 
    ID
5    3
6    3
7    3
8    3
9    4
10   4

关于Python如何根据唯一的客户ID将数据框分成两个大小相等的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27005833/

相关文章:

python - 具有缺失数据的 boolean 系列的 pandas.eval

python - 根据第三列中的值,二维图上的点具有不同的颜色

c++ - 使用 boost split 方法时可以使用字符串作为分隔符吗?

python - 当我使用 json.loads 时,你是什么?

python - 查找平均值但忽略列表中的任何零 [Python]

Python sklearn kaggle/titanic 教程在最后一个特征尺度上失败

python将列表字符串转换为列表列表

linux - awk、分割并打印一系列列

python - 删除Python RTL(从右到左)语言文本中的换行符

python - igraph R 和 Python 中社区检测函数的不同结果