pandas/python:通过迭代替换数据帧中的分类值

如何解决pandas/python:通过迭代替换数据帧中的分类值

我创建了一个数据库,我试图用一些数值代替分类变量 我通过“枢轴”计算的。在我的代码中,我试图遍历整个数据框,如果数据框分类列单元格与“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','blue',290],['axel','yellow',190],['william',['tom','orange',100],['angela',160],'purple',220],['aroon',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

解决方法

您有两个分类值名称和颜色。所以你可以做这样的事情。

df['Name'] = df['Name'].apply(lambda x: myfunc(x))

然后你可以创建一个函数 myfunc() 从上面的代码中接收 x 。上面的代码所做的是,它会一一遍历列,并将每一行的值一一传递给函数。在函数内部,您可以定义转换分类值的逻辑

def myfunc(x):
    if x in sublist_names:
        index=sublist_names.index(x)
        return sublist_values[index]
    return x

对列 Color 执行相同的操作。

,

试试这个:

df.Name = np.where(df.groupby('Name',as_index=False)['Name'].cumcount().eq(0),df.Name,df.weight)

输出:

    Name    Age     height  color   weight
0   tom     10  6.0     brown   200
1   nick    15  5.1     red     150
2   juli    14  5.5     black   170
3   peter   10  6.0     blue    290
4   axel    15  5.1     yellow  190
5   william     14  5.5     yellow  170
6   100     10  6.0     orange  100
7   150     15  5.1     brown   150
8   angela  14  5.5     black   160
9   220     10  6.0     purple  220
10  150     15  5.1     orange  150
11  aroon   14  5.5     red     170
,

好的,我明白你的问题了。只需在函数声明之前编写以下代码即可。

sub_names=[]
sub_values=[]

for i in sublist_names:
    sub_names.extend(i)

for i in sublist_values:
    sub_values.extend(i)

同样不要忘记更新 myfunc() 中的变量名。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?