从python嵌套列表中创建pandas中的新列

时间:2017-01-29 01:26:20

标签: python pandas numpy reshape

我有一个pandas数据框。其中一列有一个嵌套列表。我想从嵌套列表

创建新列

示例:

L = [[1,2,4],
    [5,6,7,8],
    [9,3,5]]

我希望嵌套列表中的所有元素都是列。如果列表包含元素,则值应为1,否则为零。

1 2 4 5 6 7 8 9 3
1 1 1 0 0 0 0 0 0
0 0 0 1 1 1 1 0 0
0 0 0 1 0 0 0 1 1

2 个答案:

答案 0 :(得分:2)

您可以尝试以下操作:

df = pd.DataFrame({"A": L})

df
#          A
#0  [1, 2, 4]
#1  [5, 6, 7, 8]
#2  [9, 3, 5]

# for each cell, use `pd.Series(1, x)` to create a Series object with the elements in the 
# list as the index which will become the column headers in the result
df.A.apply(lambda x: pd.Series(1, x)).fillna(0).astype(int)

#   1   2   3   4   5   6   7   8   9
#0  1   1   0   1   0   0   0   0   0
#1  0   0   0   0   1   1   1   1   0
#2  0   0   1   0   1   0   0   0   1

答案 1 :(得分:2)

pd.value_counts

与@ Psidom的回答非常相似。但是,我使用df并将处理重复

使用@ Psidom' s df = pd.DataFrame({'A': L}) df.A.apply(pd.value_counts).fillna(0).astype(int)

numpy

lst = df.A.values.tolist() n = len(lst) lengths = [len(sub) for sub in lst] flat = np.concatenate(lst) u, inv = np.unique(flat, return_inverse=True) rng = np.arange(n) slc = np.hstack([ rng.repeat(lengths)[:, None], inv[:, None] ]) data = np.zeros((n, u.shape[0]), dtype=np.uint8) data[slc[:, 0], slc[:, 1]] = 1 pd.DataFrame(data, df.index, u)

更多参与,但速度快

   1  2  3  4  5  6  7  8  9
0  1  1  0  1  0  0  0  0  0
1  0  0  0  0  1  1  1  1  0
2  0  0  1  0  1  0  0  0  1

结果

$(element).next().find(':focusable').focus();