我有一個簡單的數據框df
,列表爲lists
。我想根據lists
生成3個額外的列。Pandas Dataframe,列表列,創建累積列表集合列,並按記錄差異記錄
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
(某些類型的應用?(是那麼對於增加和刪除,基本上我們想要比較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)
祝你玩得開心,謝謝。
出色,它的工作原理。我認爲最好的解決方案是下面的lukess和@jezreal的組合。國際海事組織對['add']和['drop']的盧克斯處理稍微更加pythonic,因爲使用實際的df列創建新的臨時列。 jezreal在處理.cumsum時不需要np.unique,而是使用(set)而不是使用lambda來稍微pythonic。盧克斯在修正使用'else set'的轉換中創建的nan稍微好一些,專門應用於0索引。偉大的工作人員。選擇盧克斯是因爲他是第一個,但都得到了投票! – clg4