[英]Split data frame into multiple data frames based on unique column combinations
[英]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.