gpt4 book ai didi

Python Pandas Groupby 根据索引重置值

转载 作者:太空狗 更新时间:2023-10-29 23:57:48 24 4
gpt4 key购买 nike

所以我有一个数据框,其中包含一些我想修复的错误信息:

import pandas as pd
tuples_index = [(1,1990), (2,1999), (2,2002), (3,1992), (3,1994), (3,1996)]
index = pd.MultiIndex.from_tuples(tuples_index, names=['id', 'FirstYear'])
df = pd.DataFrame([2007, 2006, 2006, 2000, 2000, 2000], index=index, columns=['LastYear'] )


df
Out[4]:
LastYear
id FirstYear
1 1990 2007
2 1999 2006
2002 2006
3 1992 2000
1994 2000
1996 2000

id 指的是一个企业,这个 DataFrame 是一个更大的数据帧的一小部分,显示了一个企业如何移动。每条记录都是一个独特的位置,我想捕捉它在那里的第一年和最后一年。当前的“LastYear”对于只有一条记录的企业是准确的,对于多条记录的企业的最新记录是准确的。 df 最后应该是这样的:

              LastYear
id FirstYear
1 1990 2007
2 1999 2002
2002 2006
3 1992 1994
1994 1996
1996 2000

我为了得到它所做的工作非常笨重:

multirecord = df.groupby(level=0).filter(lambda x: len(x) > 1)
multirecord_grouped = multirecord.groupby(level=0)

ls = []
for _, group in multirecord_grouped:
levels = group.index.get_level_values(level=1).tolist() + [group['LastYear'].iloc[-1]]
ls += levels[1:]

multirecord['LastYear'] = pd.Series(ls, index=multirecord.index.copy())
final_joined = pd.concat([df.groupby(level=0).filter(lambda x: len(x) == 1),multirecord]).sort_index()

有没有更好的办法?

最佳答案

shift_year = lambda df: df.index.get_level_values('FirstYear').to_series().shift(-1)
df.groupby(level=0).apply(shift_year) \
.combine_first(df.LastYear).astype(int) \
.rename('LastYear').to_frame()

enter image description here

关于Python Pandas Groupby 根据索引重置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39110476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com