按特殊阈值划分数据帧

时间:2020-03-24 12:52:43

标签: python pandas

我以一个DataFrame为例:

name  age
Ashe   12
Ashe   13
Ashe   23
John   33
John   45
Karin  55
David  84
Zaki   34
Mano   45

我的阈值是我需要将其划分为不同的名称,就像我需要3个不同的名称一样,因此我需要输出为:

name  age
Ashe   12
Ashe   13
Ashe   23
John   33
John   45
Karin  55

和第二个DF:

name  age
David  84
Zaki   34
Zaki   23
Zaki   35
Mano   45

我该怎么办?

1 个答案:

答案 0 :(得分:0)

from itertools import islice

def chunk(lst, size):
    lst = iter(lst)
    return iter(lambda: tuple(islice(lst, size)), ())

name_groups = list(chunk(df.name.unique(),3))
data = {}
for i, group in enumerate(name_groups):
    data[f'df{i}'] = df[df.name.isin(group)]

chunk函数将数组拆分为大小为n的块(在我们的示例中为3)
您可以在这里了解更多信息:https://stackoverflow.com/a/22045226/13104290

name_groups包含一个元组列表,每个元组最多包含3个元素:
[('Ashe', 'John', 'Karin'), ('David', 'Zaki', 'Mano')]

自从我们发送df.name.unique()以来,没有重复项。

现在,我们需要动态创建每个新的数据帧,我们将通过创建一个字典并一次添加一个新分区来做到这一点。

词典现在包含两个数据帧df0df1

data['df0']

    name    age
0   Ashe    12
1   Ashe    13
2   Ashe    23
3   John    33
4   John    45
5   Karin   55

data['df1']

    name    age
6   David   84
7   Zaki    34
8   Mano    45