我有点被以下问题困住了:
我想使用以下词典:
gasDict ={'Chair': {'CO2': 0.4, 'Methane': 0.5, 'Other': 0.6},'House': {'CO2': 0.4, 'Methane': 0.2, 'Other': 0.3}}
purchaseDict = {'Bob': ['Chair', 'House'], 'Jim': ['Chair']}
并创建以下数据框:
| Name | Purchase| CO2 | Methane |Other |
|:---- |:-------:|:-----:|:-------:|-----:|
| Bob | Chair | 0.4 | 0.5 | 0.6 |
| Bob | House | 0.4 | 0.2 | 0.3 |
| Jim | Chair | 0.4 | 0.5 | 0.6 |
我的两个挑战是 1) 为对应的值列表项的 # 创建一个具有重复名称的名称列;和 2) 将三个 gasDict 嵌套键:值对与来自 purchaseDict 的相应“purchase”键进行映射。
感谢您的帮助!
答案 0 :(得分:3)
我们可以使用 DataFrame.from_dict
来转换 gasDict
和 purchaseDict
的列表推导式。然后join
一起:
gasDict = {'Chair': {'CO2': 0.4, 'Methane': 0.5, 'Other': 0.6},
'House': {'CO2': 0.4, 'Methane': 0.2, 'Other': 0.3}}
purchaseDict = {'Bob': ['Chair', 'House'], 'Jim': ['Chair']}
df_gas = pd.DataFrame.from_dict(gasDict, orient='index')
df_purchase = pd.DataFrame([(k, v)
for k, lst in purchaseDict.items() for v in lst],
columns=['Name', 'Purchase'])
df = df_purchase.join(df_gas, on='Purchase')
df
:
Name Purchase CO2 Methane Other
0 Bob Chair 0.4 0.5 0.6
1 Bob House 0.4 0.2 0.3
2 Jim Chair 0.4 0.5 0.6
答案 1 :(得分:3)
试试:
gasDict = {
"Chair": {"CO2": 0.4, "Methane": 0.5, "Other": 0.6},
"House": {"CO2": 0.4, "Methane": 0.2, "Other": 0.3},
}
purchaseDict = {"Bob": ["Chair", "House"], "Jim": ["Chair"]}
df = pd.DataFrame(
{"Name": k, "Purchase": vv, **gasDict[vv]}
for k, v in purchaseDict.items()
for vv in v
)
print(df)
打印:
Name Purchase CO2 Methane Other
0 Bob Chair 0.4 0.5 0.6
1 Bob House 0.4 0.2 0.3
2 Jim Chair 0.4 0.5 0.6
答案 2 :(得分:0)
基于@Henry Ecker 的回答的替代方案。除了使用推导式,您还可以构造一个 DataFrame
并使用 .explode
gasDict = {
"Chair": {"CO2": 0.4, "Methane": 0.5, "Other": 0.6},
"House": {"CO2": 0.4, "Methane": 0.2, "Other": 0.3},
}
purchaseDict = {"Bob": ["Chair", "House"], "Jim": ["Chair"]}
df_gas = pd.DataFrame.from_dict(gasDict, orient="index")
df_purchase = (
pd.DataFrame(purchaseDict.items(), columns=["Name", "Purchase"])
.explode("Purchase")
)
out = df_purchase.join(df_gas, on='Purchase').reset_index()
print(out)
Name Purchase CO2 Methane Other
0 Bob Chair 0.4 0.5 0.6
1 Bob House 0.4 0.2 0.3
2 Jim Chair 0.4 0.5 0.6