"啪"列表分成多行(pandas)的行

时间:2018-03-01 16:22:01

标签: python pandas

我有一个这样的数据框:

user    groupIDs                report
user2   [31501, 31502, 31503]   blogpost
jim     [31501, 31502, 31503]   book
jane    [31600]                 article
jim     [31501, 31502, 31503]   book
peter   [31501, 31502, 31503]   blogpost
user1   [31501, 31502]          blogpost
user1   [31501, 31502]          blogpost
john    [31600]                 tweet

groupIDs列包含整数列表。

我需要将此数据框转换为:

user    groupIDs    report
user2   31501       blogpost
user2   31502       blogpost
user2   31503       blogpost
jim     31501       book
jim     31502       book
jim     31503       book
jane    31600       article
...

也就是说,将具有多个ID的每一行转换为此行的副本列表,每个副本都包含原始列表中的一个ID。

使用此专栏的

groupby抱怨由于显而易见的原因而无法播放。

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题

$wheres[]

答案 1 :(得分:1)

这是一种方法。这需要几行,但构建新的数据帧通常更有效。

from itertools import chain

df = pd.DataFrame([['user2', [31501, 31502, 31503], 'blogpost']],
                  columns=['user', 'groupIDs', 'report'])

lens = list(map(len, df['groupIDs']))

df_out = pd.DataFrame({'user': np.repeat(df['user'].values, lens),
                       'groupIDs': list(chain.from_iterable(df['groupIDs'].values)),
                       'report': np.repeat(df['report'].values, lens)})

#    groupIDs    report   user
# 0     31501  blogpost  user2
# 1     31502  blogpost  user2
# 2     31503  blogpost  user2