【问题标题】:Create a column by Groupy and filter in python按组创建列并在python中过滤
【发布时间】:2021-10-12 10:21:36
【问题描述】:

我有一个包含供应商、账单金额和付款类型的数据框。

我想添加一列,我将在其中获得供应商的滞纳金。

是否可以写一行代码来得到这个输出?

df['供应商延迟付款']=

【问题讨论】:

    标签: python-3.x pandas dataframe python-requests


    【解决方案1】:

    您可以使用groupby.transformbfill() 的组合,并使用assign 分配回新列:

    df = df.assign(late_payments=df[df['Payment'].eq('Delay')].groupby('Vendor')['Amount'].transform('sum')).bfill()
    

    打印:

      Vendor Payment  Amount  late_payments
    0      A  Ontime      91           78.0
    1      A  Ontime      90           78.0
    2      A   Delay      78           78.0
    3      B  Ontime      58          166.0
    4      B   Delay      77          166.0
    5      B  Ontime      96          166.0
    6      B   Delay      89          166.0
    

    【讨论】:

      【解决方案2】:

      让我们定义数据框:

      data = pd.DataFrame({'Vendor':['A', 'A', 'B', 'B'],
              'Payment':['Ontime', 'Delay', 'Ontime', 'Delay'],
              'Paid Late by Vendor':[20, 21, 19, 18]})
      

      要获得您想要的结果,您需要使用分组值创建一个单独的数据框,然后将其与原始数据框组合。

      由于您只需要延迟付款的值,因此您需要过滤要分组的数据以仅包含所需的记录,然后对其进行分组。 reset_index() 用于使索引成为列(在这种情况下,它是我们分组的列;供应商)

      groupedLateData = data[data['Payment']=='Delay'].groupby('Vendor')["Paid Late by Vendor"].sum().reset_index()
      

      然后我们将生成的数据框与 Vendor 列上的原始数据框合并

      pd.merge(data, groupedLateData, on='Vendor')
      

      这将是结果:

      【讨论】:

      • 能不能写一行代码得到结果? df['供应商延迟付款']=...
      猜你喜欢
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 2017-05-09
      • 1970-01-01
      • 2023-03-19
      • 2019-01-12
      相关资源
      最近更新 更多