以下是輸出應如何顯示的示例:
資料框:df 需要輸出
class_id item req_output
a 1 [1]
a 2 [1,2]
a 3 [1,2,3]
b 1 [1]
b 2 [1,2]
我試過了:
df.groupby("class").apply(lambda x: list(x["item"])
class_id output
a [1,2,3]
b [1,2]
但這僅給出了整個聚合,但是考慮到類,我需要在每一行中進行聚合
uj5u.com熱心網友回復:
首先,將每個元素放入一個大小為 1 的串列中。在這里,我們是(利用濫用?)事實[1] [2] = [1, 2]。然后按 和 分組。GroupBy.apply Series.cumsum
df["req_output"] = (
df["item"]
.map(lambda x: [x])
.groupby(df["class_id"])
.apply(lambda x: x.cumsum())
)
class_id item req_output
0 a 1 [1]
1 a 2 [1, 2]
2 a 3 [1, 2, 3]
3 b 1 [1]
4 b 2 [1, 2]
或者我們可以創建一個函式來回傳所需的串列并使用GroupBy.transform.
def get_slices(s):
"""
>>> get_slices( pd.Series([1, 2, 3]) )
[[1], [1, 2], [1, 2, 3]]
"""
lst = s.tolist()
return [lst[:i] for i in range(1, len(lst) 1)]
df['req_output'] = df.groupby('class_id')['item'].transform(get_slices)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324092.html
