pandas 如何使用“groupby”将列聚合到字典中,以便新列包含该字典?

k97glaaz  于 2023-01-24  发布在  其他
关注(0)|答案(1)|浏览(129)

我有一个 Dataframe ,其中包含一个personyear和一组包含flag的列,如下所示:

# sample dataframe
data = [["John Doe", 2018, True, False, True], ["Jane Doe", 2019, True, False, False]]

df = pd.DataFrame(data, columns=["person", "year", "flag_1", "flag_2", "flag_3"])
df
person     year   flag_1   flag_2  flag_3
0   John Doe    2018    True    False   True
1   Jane Doe    2019    True    False   False

我希望最终输出为groupby,其中保留了personyear,并存储了一个包含所有标志结果的字典的 * new * 列。
有点像,但不太像,这个:
第一:重塑
一个二个一个一个
第二步:创建字典

reshaped_df.set_index(["person", "year", "variable"]).T.to_dict("list")
{('John Doe', 2018, 'flag_1'): [True],
 ('Jane Doe', 2019, 'flag_1'): [True],
 ('John Doe', 2018, 'flag_2'): [False],
 ('Jane Doe', 2019, 'flag_2'): [False],
 ('John Doe', 2018, 'flag_3'): [True],
 ('Jane Doe', 2019, 'flag_3'): [False]}
    • 除外**我希望输出如下所示:
person      year    flag_dict
0   John Doe    2018    {'flag_1': True, 'flag_2': False, 'flag_3': True}
1   Jane Doe    2019    {'flag_1': True, 'flag_2': False, 'flag_3': False}

这可能吗?如果可能,怎么做?谢谢!

xggvc2p6

xggvc2p61#

无需复杂的整形,只需使用to_dict即可

cols = list (df.filter(like='flag_'))

out = (
 df.drop(columns=cols)
   .assign(flag_dict=df[cols].to_dict('records'))
 )

输出:

person  year                                           flag_dict
0  John Doe  2018   {'flag_1': True, 'flag_2': False, 'flag_3': True}
1  Jane Doe  2019  {'flag_1': True, 'flag_2': False, 'flag_3': False}

相关问题