【发布时间】:2018-12-14 05:26:21
【问题描述】:
我试图在几行中将多列拆分为多行,而不是为它编写一个大的“def 函数”。
我有 2 列需要按 ; 拆分。我正在尝试遵循:Split cell into multiple rows in pandas dataframe
from pandas import DataFrame
import numpy as np
from itertools import chain
import pandas as pd
a = DataFrame([{'var1': 'a;b;c', 'var2': 1,'var3':'apples;mango'},
{'var1': 'd;e;f', 'var2': 2,'var3':'kiwi;pineapple'},
{'var1': 'g;e;a', 'var2': 15,'var3':'pinneapple'},
{'var1': 'm', 'var2': 12,'var3':'orange'}])
a
# return list from series of comma-separated strings
def chainer(s):
return list(chain.from_iterable(s.str.split(';')))
# calculate lengths of splits
lens = a['var1'].str.split(';').map(len)
# create new dataframe, repeating or chaining as appropriate
new_df = pd.DataFrame({'var1': chainer(a['var1']),
'var2': np.repeat(a['var2'], lens),
'var3': chainer(a['var3'])
})
print(new_df)
#ERROR: ValueError: arrays must all be same length
【问题讨论】:
-
您似乎尝试的jpp 解决方案的主要区别是您想要
var1和var3中值的笛卡尔积(例如第一行有输出中的 3*2 行)而当package中的任何值与package code中的一个值相关联时写入解决方案。
标签: python python-3.x pandas