我有一个包含如下记录的数据框,对于 id
之后的所有行,直到 id
没有非空值,该值应该作为列表附加。
[{'id': 'a', 'value': 1},
{'id': nan, 'value': 2},
{'id': nan, 'value': 3},
{'id': 'b', 'value': 4},
{'id': nan, 'value': 5},
{'id': nan, 'value': 6},
{'id': 'c', 'value': 7},
{'id': nan, 'value': 8},
{'id': nan, 'value': 9}]
我希望输出为,
id value
a [1,2,3]
b [4,5,6]
c [7,8,9]
尝试过的方法:
df.groupby('id')['value'].agg(list)
答案 0 :(得分:1)
先向前填充缺失值,然后聚合list
:
df = df.groupby(df['id'].ffill())['value'].agg(list).reset_index()
print (df)
id value
0 a [1, 2, 3]
1 b [4, 5, 6]
2 c [7, 8, 9]