簡體   English   中英

pandas 應用並分配給多個列

[英]pandas apply and assign to multiple columns

我有一個 dataframe ,其列如下:

col 
a2_3
f4_4
c4_1

我想從該列中添加兩列,如下所示:

col   col1   col2   col3
a2_3    a      2     3
f4_4    f      4     4
c4_1    c      4     1

以下不起作用:

df[['col1', 'col2', 'col3']] = df['col'].apply(lambda s: (s[1], *s[1:].split("_")) )

如何將一系列元組分配給新列?

這里apply不是必需的,首先使用str進行索引,然后使用Series.str.splitexpand=True

df[['col1', 'col2']] = df['col'].str[1:].str.split("_", expand=True)
print (df)
    col col1 col2
0  a2_3    2    3
1  f4_4    4    4
2  c4_1    4    1

您的解決方案可以使用Series構造函數,但速度很慢:

df[['col1', 'col2']] = df['col'].apply(lambda s: pd.Series(s[1:].split("_")))

更快的是使用 DataFrame 構造函數:

df1 = pd.DataFrame(df['col'].apply(lambda s: s[1:].split("_")).tolist(), index=df.index)
df[['col1', 'col2']] = df1

或列表理解:

df[['col1', 'col2']] = pd.DataFrame([s[1:].split("_") for s in df['col']], index=df.index)

編輯:解決方案類似:

L = df['col'].apply(lambda s: (s[0], *s[1:].split("_"))).tolist()
df[['col1', 'col2', 'col3']] = pd.DataFrame(L, index=df.index)

df[['col1', 'col2', 'col3']] = pd.DataFrame([(s[0], *s[1:].split("_")) for s in df['col']], 
                                 index=df.index)
print (df)
    col col1 col2 col3
0  a2_3    a    2    3
1  f4_4    f    4    4
2  c4_1    c    4    1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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