![](/img/trans.png)
[英]How to convert column with list of values into rows in Pandas DataFrame
[英]How to convert column with list of values into rows in Pandas DataFrame including previous column also
嗨,我有一個這樣的數據框:
A B
0: a [[L1, L2]]
1: b [[L1, L2, L3]]
我想把它改成:
A B C
0: a [[L1, L2]] L1
1: a [[L1, L2]] L2
2: b [[L1, L2, L3]] L1
3: b [[L1, L2, L3]] L2
4: b [[L1, L2, L3]] L3
我怎樣才能做到這一點?
試試這樣的:
import pandas as pd
from io import StringIO
data = """
A B
a [[L1,L2]]
b [[L1,L2,L3]]
"""
df = pd.read_csv(StringIO(data),sep=' ')
df['C']=df['B']
df['C']=df.C.astype(str).replace(['\[','\]', "'", "\s+"], '', regex=True)
print(df.set_index(df.columns.drop('C',1).tolist()).C.str.split(',', expand=True).stack().reset_index().rename(columns={0:'C'}).loc[:, df.columns])
結果 :
A B C
0 a [[L1,L2]] L1
1 a [[L1,L2]] L2
2 b [[L1,L2,L3]] L1
3 b [[L1,L2,L3]] L2
4 b [[L1,L2,L3]] L3
使用itertools.chain
一種解決方案:
import pandas as pd
from itertools import chain
# old dataframe:
df = pd.DataFrame({'A': ['a', 'b'],
'B': [ [['L1', 'L2']], [['L1', 'L2', 'L3']] ]})
d = {'A':[], 'B':[], 'C': []}
for a, b in zip(df['A'], df['B']):
for c in chain.from_iterable(b):
d['A'].append(a)
d['B'].append(b)
d['C'].append(c)
# new dataframe:
df = pd.DataFrame(d)
print(df)
印刷:
A B C
0 a [[L1, L2]] L1
1 a [[L1, L2]] L2
2 b [[L1, L2, L3]] L1
3 b [[L1, L2, L3]] L2
4 b [[L1, L2, L3]] L3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.