[英]How to split list of dictionary in one column into two columns in pyspark dataframe?
[英]how to split a list of values in one column of a dataframe into various columns equally
說我有一個數據框:
x
0 [0.5, 1.5, 2.5, 3.5, 4.5]
1 [5.5, 6.5, 7.5]
2 [8.5, 9.5, 10.5, 11.5]
3 [12.5, 13.5, 14.5, 15.5]
我想將值拆分為三個單獨的列(每個列具有兩個值),分別為:
a b c
0 [0.5, 1.5] [2.5, 3.5] [4.5]
1 [5.5, 6.5] [7.5] 0
2 [8.5, 9.5] [10.5, 11.5] 0
3 [12.5, 13.5] [14.5, 15.5] 0
我該怎么做呢?
首先,我認為在大熊貓中使用list
並不是一個好主意 。
但是可以使用自定義函數和DataFrame
構造函數使用列表理解功能:
#https://stackoverflow.com/a/312464/2901002
def chunks(l, n):
"""Yield successive n-sized chunks from l."""
for i in range(0, len(l), n):
yield l[i:i + n]
df1 = pd.DataFrame([list(chunks(x, 2)) for x in df['x']]).fillna(0)
print (df1)
0 1 2
0 [0.5, 1.5] [2.5, 3.5] [4.5]
1 [5.5, 6.5] [7.5] 0
2 [8.5, 9.5] [10.5, 11.5] 0
3 [12.5, 13.5] [14.5, 15.5] 0
您沒有提到c是在第四個元素之后還是在后兩個元素之后(如果列表包含六個以上元素)。
如果您要在c中的第四個元素之后輸入所有內容,則為以下代碼
df['a']=df['x'].apply(lambda x:x[:2] if len(x)>0 else 0)
df['b']=df['x'].apply(lambda x:x[2:4] if len(x)>2 else 0)
df['c']=df['x'].apply(lambda x:x[4:] if len(x)>4 else 0)
df.drop('x',axis=1,inplace=True)
或者,即使列表中第四個元素之后還有更多元素,如果您想要在c中包含兩個元素,也可以使用此代碼
df['a']=df['x'].apply(lambda x:x[:2] if len(x)>0 else 0)
df['b']=df['x'].apply(lambda x:x[2:4] if len(x)>2 else 0)
df['c']=df['x'].apply(lambda x:x[4:6] if len(x)>4 else 0)
df.drop('x',axis=1,inplace=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.