有一列pandas dataframe文本字符串包含逗号分隔值。我想分割每个CSV字段并为每个条目创建一个新行。例如,a应该成为b:
In [7]: a Out[7]: var1 var2 0 a,b,c 1 1 d,e,f 2 In [8]: b Out[8]: var1 var2 0 a 1 1 b 1 2 c 1 3 d 2 4 e 2 5 f 2
到目前为止,我已经尝试过各种简单的函数,但是该.apply方法在轴上使用时似乎只接受一行作为返回值,并且无法工作。
示例数据:
from pandas import DataFrame import numpy as np a = DataFrame([{'var1': 'a,b,c', 'var2': 1}, {'var1': 'd,e,f', 'var2': 2}]) b = DataFrame([{'var1': 'a', 'var2': 1}, {'var1': 'b', 'var2': 1}, {'var1': 'c', 'var2': 1}, {'var1': 'd', 'var2': 2}, {'var1': 'e', 'var2': 2}, {'var1': 'f', 'var2': 2}])
我知道这是行不通的,因为我们通过经历numpy失去了DataFrame元数据
def fun(row): letters = row['var1'] letters = letters.split(',') out = np.array([row] * len(letters)) out['var1'] = letters a['idx'] = range(a.shape[0]) z = a.groupby('idx') z.transform(fun)