![](/img/trans.png)
[英]How to split index into new index and new column in Python Pandas DataFrame?
[英]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
您可以使用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.