簡體   English   中英

如何創建具有一個索引鍵列和多個值列的字典

[英]how to create a dictionary with one index key column and multiple value columns

我有一個包含 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

例外的結果是這樣的

df{cellID}=('latitude','longitude')
# 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 和 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM