首页 > 解决方案 > 如何在 python 中对这个数据框进行分组?

问题描述

我有这个问题:

import pandas as pd

stripline = "----------------------------"

rawData = {
    'order number': ['11xa', '11xa', '11xa', '21xb', '31xc'],
    'working area': ['LLA', 'LLE', 'LLS', 'MLA', 'MLE'],
    'time': [1, 6, 13, 35, 24]
}

df = pd.DataFrame(rawData)
print("original data:")
print(df.head())

print(stripline)

rawData2 = {
    'order number': ['11xa', '21xb', '31xc'],
    'working area': ['LLS', 'MLA', 'MLE'],
    'time': [20, 35, 24]
}
df2 = pd.DataFrame(rawData2)

print("expected result:")
print("group after order number, sum all times to that order and choose working field with the biggest time")
print(df2.head())

如何操作我的数据框 df 以获取 df2?

我想总结时间列中与订单号相对应的所有值。我想使用时间最长的工作领域,特别是我想保留其余的数据。新的数据框有三阶,旧的一阶五阶。

标签: pythonpandasdataframegroupingdata-manipulation

解决方案


import pandas as pd

rawData = {
    'order_number': ['11xa', '11xa', '11xa', '21xb', '31xc'],
    'working_area': ['LLA', 'LLE', 'LLS', 'MLA', 'MLE'],
    'time': ['1', '6', '13', '35', '24']
    }

df = pd.DataFrame(rawData)
df['time'] = df['time'].apply(int) 
df = df.groupby('order_number', as_index=False).apply(lambda g: g.assign(sum=g.time.sum()))
df.groupby('order_number', ascending=False).apply(lambda x: x.sort_values('time').head(1)).reset_index(drop=True)

给你

  order_number working_area  time  sum
0         11xa          LLA     1   20
1         21xb          MLA    35   35
2         31xc          MLE    24   24

推荐阅读