<p>虽然dukkee的答案是可行的,但我相信如果你想用其他方式操纵数据帧,他的组织有点违反直觉。我还将重新组织数据帧,但方式如下:</p>
<pre><code>input_data = {
'a':[1,2,3],
'b':[{'AUS': {'arv': '10:00', 'vol': 5},
'DAL': {'arv': '9:00', 'vol': 1}
},
{'DAL': {'arv': '10:00', 'vol': 6},
'NYU': {'arv': '10:00', 'vol': 3}
},
{'DAL': {'arv': '8:00', 'vol': 6},
'DAL': {'arv': '10:00', 'vol': 1},
'GBD': {'arv': '12:00', 'vol': 1}
}]
}
data_list = [[input_data['a'][i], key, value['arv'], value['vol']]
for i, dic in enumerate(input_data['b'])
for key, value in dic.items()]
df = pd.DataFrame(data_list, columns=['a', 'abr', 'arv', 'vol'])
</code></pre>
<p>其结果是:</p>
<pre><code>>>> df
a abr arv vol
0 1 AUS 10:00 5
1 1 DAL 9:00 1
2 2 DAL 10:00 6
3 2 NYU 10:00 3
4 3 DAL 10:00 1
5 3 GBD 12:00 1
</code></pre>
<p>我相信这就是你组织数据的方式。将字典作为数据框中的值对我来说似乎是违反直觉的。通过这种方式,您可以使用<code>loc</code>来解决您的问题:</p>
<pre><code>>>> df.loc[(df['arv']=='10:00') & (df['abr']=='DAL')]
a abr arv vol
2 2 DAL 10:00 6
4 3 DAL 10:00 1
>>> vol_sum = sum(df.loc[(df['arv']=='10:00') & (df['abr']=='DAL')]['vol'])
>>> print(f"total vol at 10:00 is: {vol_sum}")
"total vol at 10:00 is: 7"
</code></pre>
<p>与dukkee相比没有什么好处:不需要使用集合,列表理解比循环快!请注意,在您的一个词典中,有两个<code>'DAL'</code>作为键,因此第一个被删除</p>