快速将多列数据框转换为字典

时间:2020-04-30 15:12:14

标签: python dataframe dictionary group-by apply

我有以下问题。我有一个熊猫数据框,其中A到D列与A和B列是标识符。我的最终目标是创建一个字典,其中元组(A,B)表示键,值C和D存储在每个键下作为numpy数组。如果我只想存储C D,我可以将其写成一行,但是我很难将两者都隐藏起来。那就是我所拥有的:

   output_dict = df.groupby(['A','B'])['C'].apply(np.array).to_dict()

可以正常工作,即每个键的数据是dim(N,1)数组。但是,如果我尝试以下操作:

   output_dict = df.groupby(['A','B'])['C','D'].apply(np.array).to_dict()

我收到错误消息

TypeError: Series.name must be a hashable type

如何包含第二列,以便每个键的dict中的数据为dim(N,2)的数组。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以创建一个新列(例如C_D),其中包含列CD中相应值的列表。从数据框中选择列CD,然后使用tolist()方法:

df['C_D'] = df[['C','D']].values.tolist()

然后在新列上运行代码行:

output_dict = df.groupby(['A','B'])['C_D'].apply(np.array).to_dict()

答案 1 :(得分:0)

我在Gerd已经很有帮助的答案旁边玩了很多,然后通过使用lambda找到了满足我需求的以下内容。

output_dict = df.groupby(['A','B']).apply(lambda df: np.array( [ df['C'],df['D'] ] ).T).to_dict()

在我的特殊情况下与Gerd解决方案的时间比较: Gerd's:大约0.055s 这个:大约0.035s