【问题标题】:Access groupby Pandas taking first n quantity访问 groupby Pandas 获取前 n 个数量
【发布时间】:2020-08-29 01:52:08
【问题描述】:

我有一个如下所示的数据框:

Date Product Quantity Price Buy/Sell
8/11 Apple       5      5      b
8/11 Apple       5      4      b
8/12 Pear        11     4      b
8/13 Pear        4      3      b
8/13 Pear        5      6      s

我正在尝试根据拆分分配它们。在这种情况下,比如说 60% 和 40%。

前 60% 将转到一个 df,较低的 40% 转到另一个。

所以结果是

output df1
8/11 Apple  5 5 b
8/11 Apple  1 4 b
8/12 Pear  10 4 b
8/13 Pear   3 6 s

output df2
8/11 Apple  4 4 b
8/12 Pear   1 4 b
8/13 Pear   4 3 b
8/13 Pear   2 6 s

我已将它们与 df.groupby(["product", "Buy/Sell"]) 分组,但我不确定如何访问它以获取各个组。

我想在我将它们分组后,我可以让一个计数器移动到 60% 的一侧,直到它不能再移动整个条目,然后拆分下一个。之后,其余的将达到 40%。

我将如何访问 groupby 元素?

这是一个好方法吗?

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    我认为你可以走这条路。您必须设计一些快速函数来拆分需要拆分的部分,这将是一些工作。

    您可以访问分组对象之外的组,如下所示。 “GroupBy”对象是可迭代的,当您对其进行迭代时,您会返回一个包含组名(键)和该组的数据框的元组。

    In [43]: df                                                                       
    Out[43]: 
       Date Product  Quantity  Price Buy/Sell
    0  8/11   Apple         5      5        b
    1  8/11   Apple         5      4        b
    2  8/12    Pear        11      4        b
    3  8/13    Pear         4      3        b
    4  8/13    Pear         5      6        s
    
    In [44]: grouped = df.groupby(['Product', 'Buy/Sell'])                            
    
    In [45]: type(grouped)                                                            
    Out[45]: pandas.core.groupby.generic.DataFrameGroupBy
    
    In [46]: for group_name, group in grouped: 
        ...:     print(group_name) 
        ...:     print(type(group)) 
        ...:     print(group) 
        ...:     grp_tot = group['Quantity'].sum() 
        ...:     print(f'Total quantity within this group is {grp_tot}') 
        ...:     print('\n') 
        ...:                                                                          
    ('Apple', 'b')
    <class 'pandas.core.frame.DataFrame'>
       Date Product  Quantity  Price Buy/Sell
    0  8/11   Apple         5      5        b
    1  8/11   Apple         5      4        b
    Total quantity within this group is 10
    
    
    ('Pear', 'b')
    <class 'pandas.core.frame.DataFrame'>
       Date Product  Quantity  Price Buy/Sell
    2  8/12    Pear        11      4        b
    3  8/13    Pear         4      3        b
    Total quantity within this group is 15
    
    
    ('Pear', 's')
    <class 'pandas.core.frame.DataFrame'>
       Date Product  Quantity  Price Buy/Sell
    4  8/13    Pear         5      6        s
    Total quantity within this group is 5
    

    我会使用这样的东西并在整个数据框中创建另一个“目标”列或类似的东西,并用“1”或“2”标记你希望它进入哪个拆分,然后你可以将其用作选择,这将避免逐行追加,这很慢。然后,您将不得不返回并找到需要拆分的部分并进行处理。

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2015-10-17
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2013-01-21
      • 2021-06-05
      相关资源
      最近更新 更多