簡體   English   中英

如何將數據框的一列中的值列表均等地分為多個列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM