Python 将数据帧转换为N对1字典,其中N列是指向单个列作为值的键
我想从Pandas数据框架中创建一个单独的字典,其中N列中的每一行都指向单个列中的值,我想知道是否有一种有效的方法可以做到这一点,而不必构造一组for循环和字典更新 例如,是实现以下目标的更具程序性的方法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
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太棒了!别忘了投票并接受。谢谢