我看到一些帖子在字典每个键使用一个值时起作用。但是,我想使用每个键具有多个值的字典。
myDict = {'0': ['a', 'b', 'c'], '1': ['e', 'f'], '2': ['z','x','y']}
我想创建一个新列,以便所有a
,b
和c
变为0
等等,从而产生:
col1, col2
a, 0
f, 1
a, 0
x, 2
e, 1
基于其他几个答案,我试过这个,但它不起作用:
df['col2'] = df['col1'].apply(lambda x: a for a, b in myDict.items() if x in b)
我的另一个想法是创建一个像{'a':'0', 'b':'0'}
这样的字典并对其进行映射,但如果我的列表很长(每个键都有30个值的列表),我很好奇一个更简洁的方法。或者这是最好的方式?
答案 0 :(得分:0)
让我们将Series
与stack
pd.Series(myDict).apply(pd.Series).stack().reset_index(level=0)
Out[353]:
level_0 0
0 0 a
1 0 b
2 0 c
0 1 e
1 1 f
0 2 z
1 2 x
2 2 y
更新了
s=pd.Series(myDict).apply(pd.Series).stack().reset_index(level=0).set_index(0)['level_0']
s.get(df.col1)
Out[372]:
col1
a 0
f 1
a 0
x 2
e 1
Name: level_0, dtype: object
答案 1 :(得分:0)
鉴于您的col1仅包含这些值'a','b','c','e'等),您可以使用以下内容:
myDict = {'a':0, 'b':'0', 'c':'0', 'e':'1', 'f':'1', 'z':'2', 'x':'2', 'y':'2'}
df.col1.map(myDict)
答案 2 :(得分:0)
您可以使用列表推导并输入pd.DataFrame
。这通常比操纵现有数据帧更有效。
import pandas as pd
d = {'0': ['a', 'b', 'c'], '1': ['e', 'f'], '2': ['z','x','y']}
df = pd.DataFrame([[w, k] for k, v in d.items() for w in v],
columns=['col1', 'col2'])
print(df)
col1 col2
0 a 0
1 b 0
2 c 0
3 e 1
4 f 1
5 z 2
6 x 2
7 y 2