如何创建具有一个索引键列和多个值列的字典
Posted
技术标签:
【中文标题】如何创建具有一个索引键列和多个值列的字典【英文标题】:how to create a dictionary with one index key column and multiple value columns 【发布时间】:2019-10-30 00:14:21 【问题描述】:我有一个包含 3 列 A、B、C 的数据框 df。我希望 A 列作为索引和键,B 和 C 列作为 A 的值。
我尝试了以下方法:
def cellDict():
df_set_index('A')['B','C']
x= df.set_index('A')['B']
y= df.set_index('A')['C']
z= zip(x,y)
def getCellDetails():
try:
cellDB_DF= pd.read_excel('cell_DB.xlsx')
cellLatDB= cellDB_DF['Latitude'].to_dict()
cellLongDB= cellDB_DF['Longitude'].to_dict()
cellDict= cellDF.set_index('Cell_ID')['Latitude']['Longitude'].to_dict()
print cellDict
except Exception as e:
print e.message
例外结果是这样的
dfcellID=('latitude','longitude')
【问题讨论】:
首先初始化,mydict = dict() 然后只是构建一个循环逻辑: for# Sample data.
df = pd.DataFrame('A': [1, 2, 3], 'B': [100, 200, 300], 'C': [400, 500, 600])
>>> df
A B C
0 1 100 400
1 2 200 500
2 3 300 600
然后使用字典推导:
>>> key: (a, b) for key, a, b in df.values
1: (100, 400), 2: (200, 500), 3: (300, 600)
根据@piRSquared 的建议,您还可以转置数据帧,然后使用to_dict
函数指定list
作为方向变量。
df.set_index('A').T.to_dict('list')
他的另一个建议提供了一个非常有效的解决方案:
dict(zip(df.A, zip(df.B, df.C)))
时间安排 (Python 3.7 with pandas 0.24.2)
# Set-up 10k row dataframe.
df = pd.DataFrame('A': range(10000), 'B': range(10000), 'C': range(10000))
# Method 1
%timeit -n 10 key: (a, b) for key, a, b in df.values
# 14.8 ms ± 3.62 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# Method 2
%timeit -n 10 df.set_index('A').T.to_dict('list')
# 520 ms ± 41.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# Method 3
%timeit -n 10 dict(zip(df.A, zip(df.B, df.C)))
# 7.7 ms ± 3.32 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# Method 4
%timeit -n 10 k: (a, b) for k, a, b in zip(*map(df.get, df))
# 9.61 ms ± 3.81 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
【讨论】:
在我的手机上,所以我无法验证我的答案?“dict(zip(df.A, zip(df.B, df.C)))”。或“df.set_index(‘A’).T.to_dict(‘list’)” @piRSquared 您的两个解决方案都有效。第一个非常有效(方法 3),第二个似乎相当慢(方法 2)。我正在使用 Python 3.7.3 和 pandas 0.24.2 进行测试。 我怀疑这应该加快你的速度:“k: (a, b) for k, a, b in zip(*map(df.get, df))”以上是关于如何创建具有一个索引键列和多个值列的字典的主要内容,如果未能解决你的问题,请参考以下文章