Python 将数据帧转换为N对1字典,其中N列是指向单个列作为值的键

Python 将数据帧转换为N对1字典,其中N列是指向单个列作为值的键,python,pandas,dictionary,Python,Pandas,Dictionary,我想从Pandas数据框架中创建一个单独的字典,其中N列中的每一行都指向单个列中的值,我想知道是否有一种有效的方法可以做到这一点,而不必构造一组for循环和字典更新 例如,是实现以下目标的更具程序性的方法 import pandas as pd columns = ["A", "B", "C"] data = [[1, 11, 111], [2, 22, 222], [3, 33, 333]] df = pd.DataFrame(data=data, column

我想从Pandas数据框架中创建一个单独的字典,其中N列中的每一行都指向单个列中的值,我想知道是否有一种有效的方法可以做到这一点,而不必构造一组for循环和字典更新

例如,是实现以下目标的更具程序性的方法

import pandas as pd
columns = ["A", "B", "C"]
data = [[1, 11, 111],
        [2, 22, 222],
        [3, 33, 333]]
df = pd.DataFrame(data=data, columns=columns)
df

Out[1]:
    A   B   C
0   1   11  111
1   2   22  222
2   3   33  333


mdict = {}
for c in df.columns:
    mdict.update(dict(zip(df[c], df['A'])))
mdict

Out[2]:
{1: 1, 2: 2, 3: 3, 11: 1, 22: 2, 33: 3, 111: 1, 222: 2, 333: 3}
我最终尝试创建一个长的键字典,所有键都指向相同的值,这样我就可以转到另一个数据帧并应用map函数来标准化条目。是否需要这个字典步骤,或者是否有一种更简单的方法来完成这个步骤而不必通过中间字典?谢谢

df2 = pd.DataFrame(data=[1, 11, 111, 2, 22, 222, 3, 33, 333], columns=['D'])
df2['D'] = df2['D'].map(mdict)
df2

Out[3]:
    D
0   1
1   1
2   1
3   2
4   2
5   2
6   3
7   3
8   3

另一种方法是:

g = df.set_index('A', drop=False).unstack()
m = dict(zip(g.values,  g.index.get_level_values(1)))

m
{1: 1, 2: 2, 3: 3, 11: 1, 22: 2, 33: 3, 111: 1, 222: 2, 333: 3}

df1.D.map(m)

0    1
1    1
2    1
3    2
4    2
5    2
6    3
7    3
8    3
Name: D, dtype: int64

以类似的方式,您可以将
pd.Series
对象传递给映射

s = pd.Series(g.index.get_level_values(1), index=g.values)
s

1      1
2      2
3      3
11     1
22     2
33     3
111    1
222    2
333    3
Name: A, dtype: int64

df1.D.map(s)

0    1
1    1
2    1
3    2
4    2
5    2
6    3
7    3
8    3
Name: D, dtype: int64

@StuckOnDiffyQ太棒了!别忘了投票并接受。谢谢