将N行连续添加到Pandas DF中

时间:2019-04-12 13:55:12

标签: python pandas dataframe

我收到以下错误:

  File "/packages/pandas/core/common.py", line 380, in _asarray_tuplesafe
    result[:] = [tuple(x) for x in values]
TypeError: 'numpy.int64' object is not iterable

运行时:

df.apply(lambda row: (df2.append(([row]*(row[6].split(',').__len__())), ignore_index=True)), axis=1)

目标是向每个原始数据帧行(df)申请N次附加到空df(df2)。其中N是特定字段row[6]具有的值数。

示例行用于df

编号 | 列表


0 | 126


1 | 126,127,304,305


df2应该是:

编号 | 列表


0 | 126


1 | 126


1 | 127


1 | 304


1 | 305


您可以看到我尝试将行作为列表发送,但两者都不起作用。有想法吗?

1 个答案:

答案 0 :(得分:1)

这是split之后使用unnesting的一种方法

df.List=df.List.str.split(',')
unnesting(df,['List'])
Out[466]: 
  List  Id
0  126   0
1  126   1
1  127   1
1  304   1
1  305   1

def unnesting(df, explode):
    idx = df.index.repeat(df[explode[0]].str.len())
    df1 = pd.concat([
        pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
    df1.index = idx

    return df1.join(df.drop(explode, 1), how='left')