【问题标题】:divide a dataframe on special threshold在特殊阈值上划分数据帧
【发布时间】:2020-03-24 12:52:43
【问题描述】:

我以 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

我能做什么?

【问题讨论】:

  • 这能回答你的问题吗? subsetting a Python DataFrame
  • 不,不是,因为他有一个关于年龄的查询,我这里只有名字,我需要 3 个不同的名字,即使每个名字重复 5 次

标签: python pandas


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2012-05-14
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多