我有一个数据框,里面有我的财务状况.作为示例,请参阅:

{'Transaction Date': {0: Timestamp('2022-05-04 00:00:00'),
  1: Timestamp('2022-05-04 00:00:00'),
  2: Timestamp('2022-04-04 00:00:00'),
  3: Timestamp('2022-04-04 00:00:00'),
  4: Timestamp('2022-04-04 00:00:00'),
  5: Timestamp('2022-04-04 00:00:00'),
  6: Timestamp('2022-04-04 00:00:00'),
  7: Timestamp('2022-04-04 00:00:00'),
  8: Timestamp('2022-04-04 00:00:00'),
  9: Timestamp('2022-01-04 00:00:00')},
 'Transaction Description': {0: 'School',
  1: 'Cleaner',
  2: 'Taxi',
  3: 'shop',
  4: 'MOBILE',
  5: 'Restaurant',
  6: 'Restaurant',
  7: 'shop',
  8: 'Taxi',
  9: 'shop'},
 'Debit Amount': {0: 15.0,
  1: 26.0,
  2: 48.48,
  3: 9.18,
  4: 7.0,
  5: 10.05,
  6: 9.1,
  7: 2.14,
  8: 16.0,
  9: 11.68}

我可以使用以下命令打印每个月的摘要:

reportseries = df.assign(ym=pd.to_datetime(df['Transaction Date']).dt.strftime('%Y-%m')).groupby(['ym','Transaction Description' ] )['Debit Amount'].sum() 
print(reportseries)

这给了我:

ym       Transaction Description
2022-01  shop                       11.68
2022-04  MOBILE                      7.00
         Restaurant                 19.15
         Taxi                       64.48
         shop                       11.32
2022-05  Cleaner                    26.00
         School                     15.00
Name: Debit Amount, dtype: float64

我如何对每个组进行排序才能得到这个结果?

ym       Transaction Description
2022-01  shop                       11.68
2022-04  Taxi                       64.48 
         Restaurant                 19.15
         shop                       11.32
         MOBILE                      7.00
2022-05  Cleaner                    26.00
         School                     15.00
Name: Debit Amount, dtype: float64

推荐答案

让我们重置索引,然后按降序对Debit Amount中的值进行排序,并使用新的具有iloc的排序索引来重新定位元素

reportseries.iloc[reportseries.reset_index().sort_values(['ym', 'Debit Amount'], ascending=[True, False]).index]

或者,您可以重新构造/更新现有代码以直接获得结果

cols = ['ym', 'Transaction Description']
ym = pd.to_datetime(df['Transaction Date']).dt.strftime('%Y-%m')

reportseries = (
    df.assign(ym=ym)
    .groupby(cols, as_index=False)['Debit Amount'].sum()
    .sort_values(['ym', 'Debit Amount'], ascending=[True, False])
    .set_index(cols)['Debit Amount']
)

Result

ym       Transaction Description
2022-01  shop                       11.68
2022-04  Taxi                       64.48
         Restaurant                 19.15
         shop                       11.32
         MOBILE                      7.00
2022-05  Cleaner                    26.00
         School                     15.00
Name: Debit Amount, dtype: float64

Python相关问答推荐

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

通过Selenium从页面获取所有H2元素

将图像拖到另一个图像

如何在Python中并行化以下搜索?

无法定位元素错误404

我如何使法国在 map 中完全透明的代码?

Python中绕y轴曲线的旋转

driver. find_element无法通过class_name找到元素'""

使用Python从URL下载Excel文件

如何使用SentenceTransformers创建矢量嵌入?

dask无groupby(ddf. agg([min,max])?''''

如何将数据帧中的timedelta转换为datetime

用SymPy在Python中求解指数函数

通过追加列表以极向聚合

如何在Python中将超链接添加到PDF中每个页面的顶部?

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

Polars定制函数返回多列

将相应的值从第2列合并到第1列(Pandas )

使用xlsxWriter在EXCEL中为数据帧的各行上色

使用元组扩展字典的产品挑战