根据作为列表列表的列中存在的值切片Pandas Dataframe

时间:2017-11-13 15:20:13

标签: python pandas

我有一个拥有一百万行(ID)的Pandas Dataframe,其中一列作为列表列表。 e.g。

  

df = pd.DataFrame({' id':[1,2,3,4],' token_list':[[' a',& #39; b'' C&#39],[' C'' d'],[' A'&# 39,E'' F&#39],[' C'' F']]})

我想创建一个包含所有唯一令牌的字典 - ' a'' b'' c'' e' ,' f' (我已经将其作为单独的列表)作为键和每个键与之关联的所有ID。例如,{' a' :[1,3],' b':[1],' c':[1,2,4] ..}依此类推。

我的问题是有12000个这样的令牌,我不想使用循环来遍历第一帧中的每一行。并且似乎没有用。

2 个答案:

答案 0 :(得分:2)

首先使用np.repeat numpy.concatenate进行展平,然后groupby使用list进行展开to_dict

a = np.repeat(df['id'], df['token_list'].str.len())
b = np.concatenate(df['token_list'].values)

d = a.groupby(b).apply(list).to_dict()
print (d)

{'c': [1, 2, 4], 'a': [1, 3], 'b': [1], 'd': [2], 'e': [3], 'f': [3, 4]}

详情:

print (a)
0    1
0    1
0    1
1    2
1    2
2    3
2    3
2    3
3    4
3    4
Name: id, dtype: int64

print (b)
['a' 'b' 'c' 'c' 'd' 'a' 'e' 'f' 'c' 'f']

答案 1 :(得分:2)

Message size to large