簡體   English   中英

在 pandas 中的 groupby 之后將多列轉換為 dict

[英]Convert multiple columns into dict after groupby in pandas

我有一個 dataframe

df = pd.DataFrame({"a":[1,1,1,2,2,2,3,3], "b":["a","a","a","b","b","b","c","c"], "c":[0,0,1,0,1,1,0,1], "d":["x","y","z","x","y","y","z","x"]})


    a   b   c   d
0   1   a   0   x
1   1   a   0   y
2   1   a   1   z
3   2   b   0   x
4   2   b   1   y
5   2   b   1   y
6   3   c   0   z
7   3   c   1   x

我想在 a 列和 b 列上進行分組以獲取以下 output:

    a   b   e
0   1   a   [{'c': 0, 'd': 'x'}, {'c': 0, 'd': 'y'}, {'c': 1, 'd': 'z'}]
1   2   b   [{'c': 0, 'd': 'x'}, {'c': 1, 'd': 'y'}, {'c': 1, 'd': 'y'}]
2   3   c   [{'c': 0, 'd': 'z'}, {'c': 1, 'd': 'x'}]

我的解決方案:

new_df = df.groupby(["a","b"])["c","d"].apply(lambda x: x.to_dict(orient="records")).reset_index(name="e")

但問題是它的行為不一致,有時我會遇到以下錯誤:

reset_index() 得到了一個意外的關鍵字參數“名稱”

如果有人指出上述解決方案中的問題或提供替代方法,那將很有幫助。

你可以做

new=ddf.groupby(['a','b'])[['c','d']].apply(lambda x : x.to_dict('r')).to_frame('e').reset_index()
Out[13]: 
   a  b                                                  e
0  1  a  [{'c': 0, 'd': 'x'}, {'c': 0, 'd': 'y'}, {'c':...
1  2  b  [{'c': 0, 'd': 'x'}, {'c': 1, 'd': 'y'}, {'c':...
2  3  c           [{'c': 0, 'd': 'z'}, {'c': 1, 'd': 'x'}]

或者,我們可以這樣做:

df['e'] = df[['c', 'd']].agg(lambda s: dict(zip(s.index, s.values)), axis=1)
df1 = df.groupby(['a', 'b'])['e'].agg(list).reset_index()

# print(df1)
   a  b                                                  e
0  1  a  [{'c': 0, 'd': 'x'}, {'c': 0, 'd': 'y'}, {'c':...
1  2  b  [{'c': 0, 'd': 'x'}, {'c': 1, 'd': 'y'}, {'c':...
2  3  c           [{'c': 0, 'd': 'z'}, {'c': 1, 'd': 'x'}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM