您可以通過groupby
其Series
是移柱A
的cumsum
創建由shift
:
print (df["A"].ne(df["A"].shift()).cumsum())
0 1
1 1
2 1
3 2
4 2
5 3
6 3
Name: A, dtype: int32
df = df["B"].groupby(df["A"].ne(df["A"].shift()).cumsum()).apply(list).reset_index()
print (df)
A B
0 1 [a, b, c]
1 2 [d, e]
2 3 [f, g]
對於dict
:
d = {k: list(v) for k,v in df['B'].groupby(df["A"].ne(df["A"].shift()).cumsum())}
print (d)
{1: ['a', 'b', 'c'], 2: ['d', 'e'], 3: ['f', 'g']}
d = df["B"].groupby(df["A"].ne(df["A"].shift()).cumsum()).apply(list).to_dict()
print (d)
{1: ['a', 'b', 'c'], 2: ['d', 'e'], 3: ['f', 'g']}
EDIT1:
df = df["B"].groupby([df['A'], df["A"].ne(df["A"].shift()).cumsum()]).apply(list)
df = df.groupby(level=0).apply(lambda x: x.tolist() if len(x) > 1 else x.iat[0]).to_dict()
print (df)
{1: [['a', 'b', 'c'], ['f', 'g']], 2: ['d', 'e']}
不錯!十分優雅! – Ding
@丁 - 謝謝。 – jezrael
謝謝 有沒有辦法修改和使用 {k:list(v)for k,v in df.groupby(「A」)[「B」]} structure? 另外,我想它顯示爲 'A B 1 [A,B,C] 2 [d,E] 1 [F.G]' (最後一個元素爲1,不3)。再次感謝。 – Abhi