python - 如何在熊猫中使用 groupby 进行迭代
问题描述
我有一个函数 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
解决方案
.apply()
将pandas
Series
其作为输入,而不是DataFrames
. 使用.agg
,df.groupby('accountNo').agg(yourfunction)
应该会产生更好的结果。请务必查看文档以获取有关实施的详细信息。
推荐阅读
- java - 如何让 Maven 从我的资源文件夹中读取文件
- mongodb - Spring Data MongoDB Converter 未注册
- python - Python selenium chrome 不使用 driver.get(url) 下载
- javascript - auth/invalid-custom-token Firebase 但它是正确的吗?
- redux - Redux 操作未分派。TypeError:传播不可迭代实例的无效尝试
- css - 重用生成的 CSS 类作为 mixin
- json - 从 json 引用 JSON Schema 类似于 XML 引用 XML Schema
- javascript - 如何从代理数组中删除或插入项目?
- kubernetes - 长请求在 120 秒后返回空响应,由网络负载均衡器引起
- powerbi - Power BI:列中不同计数的平均值