我有以下问题。我有一个熊猫数据框,其中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)的数组。
谢谢!
答案 0 :(得分:0)
您可以创建一个新列(例如C_D
),其中包含列C
和D
中相应值的列表。从数据框中选择列C
和D
,然后使用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