熊猫数据框高级拆分

时间:2020-05-13 13:34:24

标签: python python-3.x 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

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

能否按Type的值分组并将A / B分配给该组的一半作为新列,然后仅复制分配了标签A / B的行?如果您需要精确的分组,可以根据分组的大小进行分组

答案 2 :(得分:0)

您可以使用numpy库的“ arry_split”功能,如下所示:

import numpy as np
df_split = np.array_split(df, 2)
df1 = df_split[0]
df2 = df_split[1]