簡體   English   中英

Python-如何拆分列表以創建新列? 大熊貓

[英]Python - how to split list for creating new column? pandas

我有一個這樣的數據框

    col1    col2 
    [A, B]   1
    [A, C]   2

我想將col1分為兩列和輸出,我希望以此形式顯示

col1_A  col1_B  col2
  A       B       1
  A       C       2

我已經嘗試過這個df['col1'].str.rsplit(',',n=2, expand=True)但是它顯示TypeError: list indices must be integers or slices, not str

join + pop

df = df.join(pd.DataFrame(df.pop('col1').values.tolist(),
                          columns=['col1_A', 'col1_B']))

print(df)

   col2 col1_A col1_B
0     1      A      B
1     2      A      C

最好避免使用pd.Series.apply ,這通常會導致Python級循環,並產生額外的開銷。

您可以使用apply

import pandas as pd
df = pd.DataFrame({
    "col1": [['A', 'B'], ['A', 'C']],
    "col2": [1, 2],
})
df['col1_A'] = df['col1'].apply(lambda x: x[0])
df['col1_B'] = df['col1'].apply(lambda x: x[1])
del df['col1']
df = df[df.columns[[1,2,0]]]
print(df)

  col1_A col1_B  col2
0      A      B     1
1      A      C     2

你可以這樣做:

>> df_expanded = df['col1'].apply(pd.Series).rename(
     columns = lambda x : 'col1_' + str(x))

>> df_expanded

  col1_0 col1_1
0      A      B
1      A      C

將這些列添加到原始數據框:

>> pd.concat([df_expanded, df], axis=1).drop('col1', axis=1)

  col1_0 col1_1  col2
0      A      B     1
1      A      C     2

如果需要將列命名為行中的第一個元素:

df_expanded.columns =  ['col1_' + value
                        for value in df_expanded.iloc[0,:].values.tolist()]

  col1_A col1_B
0      A      B
1      A      C

壓縮值和列名,並使用insert獲得正確的位置。

for ind,(k,v) in enumerate(zip(zip(*df.pop('col1').tolist()),['col1_A', 'col1_B'])):
    df.insert(ind, v, k)

完整的例子

import pandas as pd

df = pd.DataFrame({
    "col1": [['A', 'B'], ['A', 'C']],
    "col2": [1, 2],
})

for ind,(k,v) in enumerate(zip(zip(*df.pop('col1').tolist()),['col1_A', 'col1_B'])):
    df.insert(ind, v, k)

print(df)

返回值:

  col1_A col1_B  col2
0      A      B     1
1      A      C     2

暫無
暫無

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

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