如何在python中对这个数据帧进行分组?

2024-09-29 21:32:01 发布

您现在位置: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?你知道吗

我要将时间列中与订单号对应的所有值相加。我想使用时间最长的工作字段,特别是我想保留其余的数据。新的数据帧有三个顺序,旧的一个有五个。你知道吗


Tags: 数据numberdftimeorderareaworkingpd
3条回答

试着这样做,您可以使用agg来实现这一点:(注意:列名中的小更改):

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.sort_values(['time'], ascending=True)

df = df.groupby(['order_number'], as_index=False).agg(dict(working_area='last', time='sum'))

输出:

   order_number  time working_area
0         11xa    20          LLS
1         21xb    35          MLA
2         31xc    24          MLE
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
rawData = {
    'order number': ['11xa', '11xa', '11xa', '21xb', '31xc'],
    'working area': ['LLA', 'LLE', 'LLS', 'MLA', 'MLE'],
    'time': ['1', '6', '13', '35', '24']
}

dataframe = pd.DataFrame(rawData)
dataframe['time'] = dataframe['time'].astype(int)
dataframe.groupby(['order number']).sum().reset_index()

输出

order number    time
0     11xa     20
1     21xb     35
2     31xc     24

相关问题 更多 >

    热门问题