python - 如何根据索引位置标准化 Pandas 数据框中的值?
问题描述
我有许多熊猫数据框,每个数据框都有一个“扬声器”列和两个标签之一。通常为 0-1,但在某些情况下为 1-2、1-3 或 0-2。我正在尝试找到一种方法来遍历我的所有数据框并将它们标准化,以便它们共享相同的标签(0-1)。
它们之间的一个一致特征是出现的第一个标签(即在数据帧的第一行中)应始终映射到“0”,而第二个标签应始终映射到“1”。
这是我需要更改的数据框之一的示例- 请注意其他人将有不同的标签:
import pandas as pd
data = [1,2,1,2,1,2,1,2,1,2]
df = pd.DataFrame(data, columns = ['speaker'])
我希望能够进行更改,使其显示为 [0,1,0,1,0,1,0,1,0,1]。
到目前为止,我已经尝试在一个更大的 for 循环中插入以下代码,该循环遍历每个数据帧。但是它根本不起作用:
for label in data['speaker']:
if label == data['speaker'][0]:
label = '0'
else:
label = '1'
希望以上内容清楚的是,我正在尝试创建类似于以下规则的规则:“在 'Speaker' 中查找与第一个索引位置的标签匹配的所有实例,并将其更改为 '0'。对于所有其他实例,请更改此到‘1’。”
解决方案
方法一
我们可以在此处使用iat
+np.where
来有条件地创建您的列:
# import numpy as np
first_val = df['speaker'].iat[0] # same as df['speaker'].iloc[0]
df['speaker'] = np.where(df['speaker'].eq(first_val), 0, 1)
speaker
0 0
1 1
2 0
3 1
4 0
5 1
6 0
7 1
8 0
9 1
方法二:
我们也可以使用booleans
,因为我们可以将它们转换为integers
:
first_val = df['speaker'].iat[0]
df['speaker'] = df['speaker'].ne(first_val).astype(int)
speaker
0 0
1 1
2 0
3 1
4 0
5 1
6 0
7 1
8 0
9 1
只有当您的值实际上是1, 2
我们可以使用时floor division
:
df['speaker'] = df['speaker'] // 2
# same as: df['speaker'] = df['speaker'].floordiv(2)
speaker
0 0
1 1
2 0
3 1
4 0
5 1
6 0
7 1
8 0
9 1
推荐阅读
- javascript - React - 通过功能组件传递 props up 组件树
- angular - Angular 9 的交互式坐标系
- mysql - nodejs 服务器 app.post 问题 XML 解析错误:语法错误位置:http://localhost:3000/get_messages 第 1 行第 1 列:
- c# - WPF中切换用户控件只显示ViewModel的名称
- excel - 组合框列出路径中的最新 2 个文件夹
- r - 是否可以以水平和垂直显示总和的方式来 table() 两列?
- php - 使用 FrontController 将元素添加到挂钩
- c++ - 这两个连接字符串的 C++ 语句有什么区别?
- algorithm - 基于与某个单元格的接近度循环遍历 NxN 个网格单元格
- marklogic - 恢复是否强制为目标数据库中的新自定义字典索引重新索引数据库?