【问题标题】:how to iterate with groupby in pandas如何在熊猫中使用 groupby 进行迭代
【发布时间】:2021-02-18 11:54:34
【问题描述】:

我有一个函数 minmax,它基本上迭代事务的数据帧。我想计算包括id在内的一组计算,所以accountstart,accountend是计算的两个字段。目的是让这个计算成为我的月份和帐户。

所以当我这样做时:

 df1 = df.loc[df['accountNo']==10]
 minmax(df1) it works.

我不能做的是:

 df.groupby('accountNo').apply(minmax)

当我这样做时:

 grouped = df.groupby('accountNo')
 for i,j in grouped:
    print(minmax(j))

它进行计算,打印结果,但没有打印它会抱怨 KeyError: -1 that is itertools。好尴尬。

如何在 Pandas 中解决这个问题?

def minmax(x):
  dfminmax = {}

  accno = set(x['accountNo'])
  accno = repr(accno)
  kgroup = x.groupby('monthStart')['cumsum'].sum()
  maxt = x['startbalance'].max()
  kgroup = pd.DataFrame(kgroup)
  kgroup['startbalance'] = 0
  kgroup['startbalance'][0] = maxt
  kgroup['endbalance'] = 0
  kgroup['accountNo'] = accno
  kgroup['accountNo'] = kgroup['accountNo'].str.strip('{}.0')
  kgroup.reset_index(inplace=True)
  for idx, row in kgroup.iterrows():
        if kgroup.loc[idx,'startbalance']==0:
                kgroup.loc[idx,'startbalance']=kgroup.loc[idx-1,'endbalance'], 
        if kgroup.loc[idx,'endbalance']==0:
                kgroup.loc[idx,'endbalance'] = 
  kgroup.loc[idx,'cumsum']+kgroup.loc[idx,'startbalance']

  dfminmax['monthStart'].append(kgroup['monthStart'])
  dfminmax['startbalance'].append(kgroup['startbalance'])
  dfminmax['endbalance'].append(kgroup['endbalance'])
  dfminmax['accountNo'].append(kgroup['accountNo'])

return dfminmax

【问题讨论】:

    标签: python pandas pandas-groupby apply


    【解决方案1】:

    .apply()pandas Series 作为输入,而不是 DataFrames。使用.agg,如df.groupby('accountNo').agg(yourfunction) 应该会产生更好的结果。请务必查看documentation 了解有关实施的详细信息。

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 2022-12-05
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多