gpt4 book ai didi

Python Pandas 滚动聚合一列列表

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:21 26 4
gpt4 key购买 nike

我有一个简单的数据框 df,其中有一列列表 lists。我想根据 lists 生成一个额外的列。

df 看起来像:

import pandas as pd
lists={1:[[1]],2:[[1,2,3]],3:[[2,9,7,9]],4:[[2,7,3,5]]}
#create test dataframe
df=pd.DataFrame.from_dict(lists,orient='index')
df=df.rename(columns={0:'lists'})
df

lists
1 [1]
2 [1, 2, 3]
3 [2, 9, 7, 9]
4 [2, 7, 3, 5]

我希望 df 看起来像这样:

df
Out[9]:
lists rolllists
1 [1] [1]
2 [1, 2, 3] [1, 1, 2, 3]
3 [2, 9, 7, 9] [1, 2, 3, 2, 9, 7, 9]
4 [2, 7, 3, 5] [2, 9, 7, 9, 2, 7, 3, 5]

基本上我想对滚动的 2 个列表进行“求和”/附加。请注意第 1 行,因为我只有 1 个列表 1 , rolllists 就是那个列表。但在第 2 行中,我有 2 个要附加的列表。然后对于第三行,附加 df[2].listsdf[3].lists 等。我以前做过类似的事情,引用这个:Pandas Dataframe, Column of lists, Create column of sets of cumulative lists, and record by record differences .
此外,如果我们可以在上面得到这部分,那么我想在 groupby 中执行此操作(因此下面的示例将是 1 个组,例如 dfgroupby 中可能看起来像这样):

  Group         lists                 rolllists
1 A [1] [1]
2 A [1, 2, 3] [1, 1, 2, 3]
3 A [2, 9, 7, 9] [1, 2, 3, 2, 9, 7, 9]
4 A [2, 7, 3, 5] [2, 9, 7, 9, 2, 7, 3, 5]
5 B [1] [1]
6 B [1, 2, 3] [1, 1, 2, 3]
7 B [2, 9, 7, 9] [1, 2, 3, 2, 9, 7, 9]
8 B [2, 7, 3, 5] [2, 9, 7, 9, 2, 7, 3, 5]

我已经尝试了 df.lists.rolling(2).sum() 之类的各种东西,但我得到了这个错误:

TypeError: cannot handle this type -> object 

在 Pandas 0.24.1 中,不幸的是在 Pandas 0.22.0 中,该命令没有错误,而是返回与 lists 中完全相同的值。所以看起来更新版本的 Pandas 不能对列表求和?这是次要问题。

喜欢任何帮助!玩得开心!

最佳答案

你可以从

开始
import pandas as pd
mylists={1:[[1]],2:[[1,2,3]],3:[[2,9,7,9]],4:[[2,7,3,5]]}
mydf=pd.DataFrame.from_dict(mylists,orient='index')
mydf=mydf.rename(columns={0:'lists'})
mydf = pd.concat([mydf, mydf], axis=0, ignore_index=True)
mydf['group'] = ['A']*4 + ['B']*4

# initialize your new series
mydf['newseries'] = mydf['lists']

# define the function that appends lists overs rows
def append_row_lists(data):
for i in data.index:
try: data.loc[i+1, 'newseries'] = data.loc[i, 'lists'] + data.loc[i+1, 'lists']
except: pass
return data

# loop over your groups
for gp in mydf.group.unique():
condition = mydf.group == gp
mydf[condition] = append_row_lists(mydf[condition])

输出

          lists Group                 newseries
0 [1] A [1]
1 [1, 2, 3] A [1, 1, 2, 3]
2 [2, 9, 7, 9] A [1, 2, 3, 2, 9, 7, 9]
3 [2, 7, 3, 5] A [2, 9, 7, 9, 2, 7, 3, 5]
4 [1] B [1]
5 [1, 2, 3] B [1, 1, 2, 3]
6 [2, 9, 7, 9] B [1, 2, 3, 2, 9, 7, 9]
7 [2, 7, 3, 5] B [2, 9, 7, 9, 2, 7, 3, 5]

关于Python Pandas 滚动聚合一列列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54650868/

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