【发布时间】:2021-03-05 12:29:21
【问题描述】:
我创建了一个数据库,并尝试用一些数值替换分类变量 我通过“枢轴”计算出来的。在我的代码中,我试图遍历整个数据框,如果数据框分类列单元格与“sublist_names”中的元素之一具有相同的值,则它们应该被位于相同位置的“sublist_values”中的元素替换作为子列表名称中的值。 例如,在迭代数据框和每个分类列时,名为“Name”的列的第一个值是字符串“tom”。 'tom' 正好是 'sublist_names' 中的第 7 个元素,这意味着它应该被 'sublist_values' 中的第 7 个元素替换为 150。
我能够获得所有需要的值,但是在通过迭代整个数据框而不是逐列工作来解决最后一项任务时,我不知道该怎么做。 我希望我解释清楚,但如有任何问题,请随时提出。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
data = [['tom', 10,6,'brown',200],
['nick', 15,5.10,'red',150],
['juli', 14,5.5,'black',170]
,['peter', 10,6,'blue',290],
['axel', 15,5.10,'yellow',190],
['william', 14,5.5,'yellow',170]
,['tom', 10,6,'orange',100],
['tom', 15,5.10,'brown',150],
['angela', 14,5.5,'black',160]
,['peter', 10,6,'purple',220],
['nick', 15,5.10,'orange',150],
['aroon', 14,5.5,'red',170] ]
df = pd.DataFrame(data, columns=['Name', 'Age','height','color','weight'])
categorical_variables= (df.select_dtypes('object') ) # categorical variables
categ_var_list=(list(categorical_variables))
print(categ_var_list)
condition_pivot_list_names=[]
pivot_values_list=[]
for i in categ_var_list:
condition_pivot = df.pivot_table(index=i, values='weight', aggfunc=np.mean)
pivot_names = (condition_pivot.index.values.tolist())
condition_pivot_list_names.append(pivot_names)
pivot_values_draft = ((condition_pivot.values.tolist()))
pivot_values = [i[0] for i in pivot_values_draft]
pivot_values_list.append(pivot_values)
print(condition_pivot_list_names, 'condition pivot list names')
print(pivot_values_list,'pivot values list')
sublist_names=[(sublists) for sublists in condition_pivot_list_names]
print(sublist_names)
sublist_values=[(sublists1) for sublists1 in pivot_values_list]
print(sublist_values)
def myfunc(x):
if x in sublist_names:
index=sublist_names.index(x)
return sublist_values[index]
return x
df['Name'] = df['Name'].apply(lambda x: myfunc(x))
print(df['Name'])
这就是 print(df[name]) 显示的内容: 0 汤姆 1 个缺口 2 七里 3 彼得 4 轴 5 威廉 6 汤姆 7 汤姆 8 安吉拉 9 彼得 10 尼克 11 点左右
这是应该显示的:
0 150 1 150 2 170 3 255 4 190 5 170 6 150 7 150 8 160 9 255 10 150 11 170
【问题讨论】:
-
您的意思是即使
color相同,您也想用对应的weight值替换它? -
不,我正在尝试将数据框中的“sublist_names”中的分类值替换为“sublist_values”中的相应条目。例如,如果我想替换“名称”列中的名称“tom”,tom 位于“sublist_names”中第一个子列表的第 7 个条目,所以它应该替换为“150”第一个的第 7 个条目'sublist_values' 中的子列表。
-
如果你想得到答案,你需要向其他愿意帮助你的用户提供这两个东西:1.这是数据的样子 2.这是结果 I(你!)正在寻找。
标签: python pandas dataframe iteration