繁体   English   中英

根据唯一列值将数据框拆分为更小的数据框

[英]Splitting data frame into smaller data frames based on unique column values

这是我的数据框:

    Quantity     Code         Value       
0       1757     08951201     717.0
1       1100     08A85800       0.0
2       2500     08A85800       0.0
3        323     08951201       0.0
4        800     08A85800       0.0

我如何将其拆分为基于代码列创建的较小数据框。 (例如,这个应该分成带有所有 08951201 代码的 df1 和带有 08A85800 的 df2)

编辑:我很想有一种方法将它们合并回原始 dataframe 在我将执行一些价值计算之后以相同的顺序。

使用groupby并应用您的自定义 function 来处理您的子 dataframe:

groups = df.groupby('Code')
print(list(groups))

# Output:
[('08951201',    Quantity      Code  Value
0      1757  08951201  717.0
3       323  08951201    0.0),

('08A85800',    Quantity      Code  Value
1      1100  08A85800    0.0
2      2500  08A85800    0.0
4       800  08A85800    0.0)]

现在假设您想按Value sum

>>> df.groupby('Code')['Value'].sum()
Code
08951201    717.0
08A85800      0.0
Name: Value, dtype: float64

正如建议的那样,您可以在 dataframe 上使用groupby()以按一列名称值分隔:

import pandas as pd

cols = ['Quantity', 'Code', 'Value']
data = [[1757,     '08951201',     717.0],
 [1100,     '08A85800',       0.0],
 [2500,     '08A85800',       0.0],
 [323,    '08951201',      0.0],
 [800,    '08A85800',       0.0]]

df = pd.DataFrame(data, columns=cols)

groups =df.groupby(['Code'])

然后您可以通过groups.indices恢复索引,这将返回一个以“代码”值作为键,索引作为值的字典。 最后,如果您想获取每个子数据帧,您可以调用group_list = list(groups) 我建议分两步完成工作(首先分组,然后调用列表),因为这样您可以通过 groupDataframe ( group )调用其他方法


编辑

然后,如果你想要一个特定的 dataframe 你可以打电话

 df_i = group_list[i][1]

group_list[i]是子数据帧的第 i 个元素,但它是一个包含(group_val,group_df)的元组。 其中group_val是与这个新的 dataframe( '08951201''08A85800' )关联的值, group_df是新的 dataframe。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM