我有一个简单的数据框 df 和一列列表lists
。我想根据以下内容生成一个附加列lists
.
The 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]
基本上我想“求和”/append
滚动 2 列表。请注意第 1 行,因为我只有 1 个列表1 https://stackoverflow.com/questions/44501875/pandas-dataframe-column-of-lists-create-column-of-sets-of-cumulative-lists-an, rolllists 就是那个列表。但在第 2 行中,我有 2 个要附加的列表。然后对于第三行,附加df[2].lists
and df[3].lists
等等。我以前做过类似的事情,参考这个:Pandas Dataframe,列表列,创建累积列表集的列,并按记录差异进行记录 https://stackoverflow.com/questions/44501875/pandas-dataframe-column-of-lists-create-column-of-sets-of-cumulative-lists-an.
另外,如果我们可以得到上面的这一部分,那么我想在groupby
(所以下面的例子是 1 组,例如df
可能看起来像这样groupby
):
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 无法对列表求和?这是次要问题。
喜欢任何帮助!玩得开心!