python 如何使用链进行几个转换,包括创建新列?[已关闭]

eiee3dmh  于 2022-12-10  发布在  Python
关注(0)|答案(1)|浏览(113)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以使用事实与引用来回答.

8小时前关门。
这篇文章是8小时前编辑并提交审查的。
Improve this question
编辑要符合的规则:
我如何链接下面的代码?我似乎不能添加新的列与链。
数据集的输入列:
订单,物料序列,日期

%%time

df = Dataset.groupby(['ORDER', pd.Grouper(key='DATE', freq='7d')]).agg(Min=('DATE','min'), Max=('DATE','max'), ITEM_SERIAL_Min=('ITEM_SERIAL','first'), ITEM_SERIAL_Max=('ITEM_SERIAL','last')).reset_index()
                     
df['DIFFERENCE'] = df['Max'] - df['Min']
df = df[df['DIFFERENCE']!='0s'].sort_values('DIFFERENCE')
df = df.drop('DATE', axis=1)
df['ORDER'] = df['ORDER'] + '_' + df['Min'].map(str).str[:10]

df

df的输出列:
订单,最小值,最大值,物料序列号最小值,物料序列号最大值,差异

dgiusagp

dgiusagp1#

这个问题很主观,但是您可以以格式化的方式链接所有操作(并添加注解!):

df = (
    Dataset
    # groupby and aggregate ...
    .groupby(['ORDER', pd.Grouper(key='DATE', freq='7d')], as_index=False)
    .agg(
        Min=('DATE', 'min'),
        Max=('DATE', 'max'),
        ITEM_SERIAL_Min=('ITEM_SERIAL', 'first'),
        ITEM_SERIAL_Max=('ITEM_SERIAL', 'last'),
    )
    # compute DIFFERENCE ...
    .assign(DIFFERENCE=lambda d: d['Max'] - d['Min'])
    # filter ...
    .loc[lambda d: d['DIFFERENCE'] != '0s']
    # sort rows by ascending DIFFERENCE
    .sort_values('DIFFERENCE')
    # remove DATE column
    .drop('DATE', axis=1)
    # compute ORDER ...
    .assign(ORDER=lambda d: d['ORDER'] + '_' + d['Min'].astype(str).str[:10])
)

相关问题