如何使用熊猫根据列的值范围分离数据框?
Posted
技术标签:
【中文标题】如何使用熊猫根据列的值范围分离数据框?【英文标题】:How to separate a data frame based on a column's range of values with pandas? 【发布时间】:2022-01-23 23:00:54 【问题描述】:这是一个有点奇怪的问题,但我一直在 python 中以 json 文件格式从 api 导入属性数据。然后我使用 Pandas 将 json 转换为数据框。
我在处理数据框中的数据时遇到问题。我当前的数据设置为像这张表一样格式化。
每个物业都被分配了一个名称和一个物业 ID 和地址,并且物业内的每个单元都有一个记录。理想情况下,我想创建多个由属性 id 分隔的数据框,使其看起来像这样。
我唯一的问题是,由于它们是一些组织问题,大约有 100 个不同的属性 ID,并且没有一个 ID 是按顺序排列的。它们都有一个从 1 到 1000 的随机数。
有没有办法通过结合使用某种唯一标识符和 for 循环来根据属性 id 自动分离数据帧?
我真的不知道如何处理这个场景。谢谢!
【问题讨论】:
你可以groupby
属性ID,并从每个组中生成数据框吗?
【参考方案1】:
试试这个:
list_of_dataframes = [x for _, x in df.groupby(df['Property Id'].ne(df['Property Id'].shift(1)).cumsum())]
现在list_of_dataframes
是list
的数据帧,其中每个数据帧包含Property Id
连续相同的行。所以Property Id
s 1 1 1 9 9 9 1 1 1
将返回 3 个数据帧,一个包含前三个 1,第二个包含接下来的三个 9,最后一个包含最后三个 1。
如果不希望组基于连续顺序(即,您希望 1 1 1 9 9 9 1 1 1
是两个数据帧,第一个包含所有六个 1,第二个包含三个 9),您可以这样做:
list_of_dataframes = [x for _, x in df.groupby(df['Property Id'])]
【讨论】:
我相信使用您提供的第二行代码对我有用。我感谢您的帮助。现在,最初,在创建数据框后,我使用了命令 output = df.to_csv('test.csv')。你知道我将如何为列表中的每个数据框创建一个 csv 文件吗? @pizzleberry 很抱歉给您带来不便,但请您提出一个新问题吗?你可以在这里链接以上是关于如何使用熊猫根据列的值范围分离数据框?的主要内容,如果未能解决你的问题,请参考以下文章