【发布时间】:2021-05-27 08:27:19
【问题描述】:
所以我正在创建一系列列映射,我可以像这样手动执行此操作
#Produces a list of dictionaries
def create_seed_dict(column, dataset):
seed_col_vals = dataset[column].values.tolist()
seed_col_keys =[column] * (len(seed_col_vals))
seed_col_map = list(zip(seed_col_keys, seed_col_vals))
seed_dict = []
for k,v in seed_col_map:
diction = {}
diction[k] = v
seed_dict.append(diction)
return seed_dict, seed_col_map
#Create dummy dataframe
num = [1, 2, 3]
color = ['red', 'white', 'black']
value = [255, 256, 257]
dict = {'Number': num, 'Color': color, 'Score': value}
df = pd.DataFrame(dict)
Num_seed_Dict,Num_map = create_seed_dict('Number', df)
print(Num_seed_Dict)
-----------------------------
Out[1]: [{'Number': 1}, {'Number': 2}, {'Number': 3}]
该函数生成一个值及其列的映射。太好了,现在我想让它更通用。
目前,如果我需要映射 2 列,例如,我运行以下命令:
num_vals = df['Number'].values.tolist()
num_keys =['Number'] * (len(num_vals))
num_map = list(zip(num_keys, num_vals))
numDict = []
for k,v in num_map:
diction = {}
diction[k] = v
numDict.append(diction)
color_vals = df['Color'].values.tolist()
color_keys =['Color'] * (len(color_vals))
color_map = list(zip(color_keys, color_vals))
colorDict = []
for k,v in num_map:
diction = {}
diction[k] = v
colorDict.append(diction)
colorNum_Dict = []
for (f,b) in zip(num_map, color_map):
diction = {}
diction[f[0]] = f[1]
diction[b[0]] = b[1]
colorNum_Dict.append(diction)
print(colorNum_Dict)
-----------------------------
[{'Number': 1, 'Color': 'red'}, {'Number': 2, 'Color': 'white'}, {'Number': 3, 'Color': 'black'}]
如果我有很多列,也可以,但不理想。我的问题是如何使第一个函数对超过 1 列有效?
我的主要问题是 for (f,b) in zip(num_map, color_map): 行,我不知道如何动态定义 (f,b..) 以匹配我在 zip 中拥有的 _maps 的数量
【问题讨论】:
标签: python python-3.x pandas loops for-loop