我的数据框看起来像这样
输入
NAME TYPE GROUP
1 Apple Source project1
2 Orange Target project1
3 pear Target project1
4 pineapple Target project1
5 plum Source project2
6 pomegranate Target project3
7 quince Target project4
8 raspberry Source project3
9 strawberry Target project4
我需要将最后一列分组的输出,并创建一个以键为源,目标为值列表的字典。
要明确:在项目1中,“苹果”是源,目标是“橙色”,“梨”,“菠萝”
预期输出:
{ Apple:["Orange","pear","pineapple"], plum:["pomegranate","quince"],raspberry:["strawberry"] }
答案 0 :(得分:-1)
查看DataFrame.to_dict()
function内置的熊猫,这似乎是您想要的。
编辑
我对下面的函数采用了另一种方法,该方法应该在不使用groupby函数的情况下也能达到相同的结果。它只是使用df作为参数,并通过使用标准DataFrame过滤来构建您要查找的字典。
def dictFromDf(df):
keys = df['Name'][df.Type == 'Source']
key_group_tuples = []
for key in keys:
key_group_tuples.append((key,df.Group[df['Name']== key].values[0]))
final_dict = {}
for pair in key_group_tuples:
final_dict[pair[0]] = list(df.Name[(df.Name != pair[0])
& (df.Group == pair[1])].values)
return final_dict
答案 1 :(得分:-1)
我假设您的源DataFrame(经过一些修正 GROUP )是:
NAME TYPE GROUP
1 Apple Source project1
2 Orange Target project1
3 pear Target project1
4 pineapple Target project1
5 plum Source project2
6 pomegranate Target project2
7 quince Target project2
8 raspberry Source project3
9 strawberry Target project3
定义以下功能:
def descr(grp):
src = grp[grp.TYPE == 'Source'].NAME.tolist()[0]
trg = grp[grp.TYPE == 'Target'].NAME.tolist()
return pd.Series([src, trg], index=['key', 'value'])
然后按以下方式应用它:
df.groupby('GROUP').apply(descr).set_index('key').value.to_dict()
结果是:
{'Apple': ['Orange', 'pear', 'pineapple'],
'plum': ['pomegranate', 'quince'],
'raspberry': ['strawberry']}
要分析此代码的工作方式,请“逐步”运行它,即:
df.groupby('GROUP').apply(descr)
开始-您将获得一个
DataFrame- descr 对所有格鲁普斯的组合结果。set_index('key')
-您将看到带有 key 的DataFrame
作为索引。value.to_dict()
-得到最终结果。