首页 > 解决方案 > Pandas Dataframe 高级拆分

问题描述

我有一个大的 DataFrame,我需要分成两个(A 和 B),A 和 B 中某个列值的行数相同。该列有 700 多个唯一值,它们都是字符串。我举个例子:

DataFrame
  Price  Type
  1      X
  2      Y
  3      Y
  4      X
  5      X
  6      X
  7      Y
  8      Y

(随机)拆分它时,我应该在 DataFrame A 和 DataFrame B 中得到两个 X 值和两个 Y 值,例如:

A
  Price  Type
  1      X
  5      X
  2      Y
  3      Y

B
  Price  Type
  4      X
  6      X
  7      Y
  8      Y

提前致谢!

标签: pythonpython-3.xpandasdataframe

解决方案


您可以使用groupby().cumcount()枚举 中的行Type,然后%2将行分为两组:

df['groups'] = df.groupby('Type').cumcount()%2

A,B = df[df['groups']==0], df[df['groups']==1]

输出:

**A**

   Price Type  groups
0      1    X       0
1      2    Y       0
4      5    X       0
6      7    Y       0

**B**

   Price Type  groups
2      3    Y       1
3      4    X       1
5      6    X       1
7      8    Y       1

推荐阅读