【发布时间】:2017-11-14 01:46:10
【问题描述】:
我有一个简单的数据框df,其中有一列列表lists。我想根据 lists 生成 3 个额外的列。
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 看起来像这样:
lists cumset adds drops
1 [1] {1} {1} {}
2 [1,2,3] {1,2,3} {2,3} {}
3 [2,9,7,9] {1,2,3,7,9} {7,9} {3}
4 [2,7,3,5] {1,2,3,5,7,9} {3,5} {9}
基本上我需要弄清楚如何创建cumset(某种类型的apply?,(是否已经有pandas函数?)。然后对于添加和删除,基本上我们想将df.lists与df.lists.shift(),并确定哪些是新的,哪些是缺失的。可能是这样的:
df['adds']=df[['lists',df.lists.shift()]].apply(lambda x: {i for i in x.lists if i not in x.lists.shift()}, axis=1)
玩得开心,谢谢。
【问题讨论】:
标签: python list pandas lambda set