根据列中的条件将Pandas数据框拆分为多个数据框

时间:2019-02-03 00:43:13

标签: python pandas dataframe

要为ML任务正确准备数据,我需要能够将原始数据帧拆分为多个较小的数据帧。我想获取上面的所有行,包括“ BOOL”列的值为1的行-每次出现1。即n个数据帧,其中n是出现1的次数。

数据样本:

df = pd.DataFrame({"USER_ID": ['001', '001', '001', '001', '001'],
'VALUE' : [1, 2, 3, 4, 5], "BOOL": [0, 1, 0, 1, 0]})

预期输出为2个数据帧,如下所示:

enter image description here

并且:

enter image description here

我已经考虑过使用if-else语句追加行的for循环-但是对于我正在使用的数据集来说效率很低。寻找一种更Python化的方式来做到这一点。

3 个答案:

答案 0 :(得分:2)

我认为在这里使用for循环会更好

idx=df.BOOL.nonzero()[0]

d={x : df.iloc[:y+1,:] for x , y in enumerate(idx)}
d[0]
   BOOL USER_ID  VALUE
0     0     001      1
1     1     001      2

答案 1 :(得分:2)

您可以使用np.split来接受要分割的索引数组:

np.split(df, *np.where(df.BOOL == 1))

如果您想在上一个数据帧中包含带有BOOL == 1的行,则只需向所有索引加1:

np.split(df, np.where(df.BOOL == 1)[0] + 1)

答案 2 :(得分:1)

为什么不理解列表?喜欢:

>>> l=[df.iloc[:i+1] for i in df.index[df['BOOL']==1]]
>>> l[0]
   BOOL USER_ID  VALUE
0     0     001      1
1     1     001      2
>>> l[1]
   BOOL USER_ID  VALUE
0     0     001      1
1     1     001      2
2     0     001      3
3     1     001      4
>>>