Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Pandas中其他行的排列生成新行

使用Pandas中其他行的排列生成新行
EN

Stack Overflow用户
提问于 2020-02-10 14:10:10
回答 2查看 177关注 0票数 2

我有一个比赛结果的数据框架(每个比赛有14个参赛者),看起来像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = race_id A0 B0 C0 A1 B1 C1 A2 B2 C2 ... A13 B13 C13 WINNER
       1     2   3 0  9  1   3  4  5 1       1   2   3   3
       2     1   5 2  7  3   2  8  6 0       6   4   1   9
       .....

我想在多元逻辑回归模型上训练数据。然而,根据目前的数据,该模型将对置换参与者很敏感。例如,如果模型被赋予记录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
race_id A0 B0 C0 A1 B1 C1 A2 B2 C2 ... A13 B13 C13 WINNER
3       9  1   3  2  3 0  4  5 1       1   2   3   3

这只是将参与者0的特征更改为比赛1中的参与者1的特征,即使输入是相同的,模型也会为获胜者输出不同的预测。

因此,我希望为数据中具有相同获胜者的每一场比赛生成随机100个排列,以训练模型以适应排列。我如何为这个数据帧创建这100个样本排列(同时保留每个参赛者的A,B,C特征?

EN

回答 2

Stack Overflow用户

发布于 2020-02-10 16:03:39

在我们开始之前,这不是一个好的建模比赛结果的方法。

但是,如果您想要这样做,您需要对列名进行置换和重新映射,然后将得到的排列组合在一起。首先,通过解析列名动态地创建参与者列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
participants = [col[1:] for col in df.columns if col.startswith('A')]

然后遍历这些参与者的排列,并应用列名重新映射:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import itertools


# Create an empty dataframe to hold our permuted races
races = pd.DataFrame()
for permutation in list(itertools.permutations(participants)):

  # Create the mapping of participants from the permutation
  mapping = {p:permutation[i] for i, p in enumerate(participants)}

  # From the participant mapping, create a column mapping
  columns = {}
  for col in df.columns:
    for old, new in mapping.items():
      if col.endswith(old):
        columns[col] = col.replace(old, new)

  # Remap column names
  race = df.rename(columns=columns)

  # Reassign the winner based on the mapping
  race['WINNER'] = race.apply(lambda row: mapping[row['WINNER']], axis=1)

  # Collect the races
  races = pd.concat([races, race])
票数 1
EN

Stack Overflow用户

发布于 2020-02-10 18:34:37

这里有一个用三元组排列填充数据帧的选项,其中df是数据帧(我省略了winner列映射;请参阅chunkwise实现)。

请注意,rand_row只是我出于示例目的而创建的随机行。它填充了从1到10的值(就像在给定的dataframe中一样),并且有40列(1个代表比赛id,每个参赛者加上13*3 ),当然,你可以改变它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import random
import itertools

def chunkwise(t, size=2):
    it = iter(t)
    return zip(*[it]*size)

def fill(df, size):
    rand_row = [random.randrange(1, 10) for _ in range(0, 13*3)]
    triplets = list(chunkwise(rand_row, 3))
    for i in range(size):
        shuffeled = random.sample(triplets, len(triplets))
        flattened = [item for triplet in shuffeled for item in triplet]
        df.loc[i] = [i+1] + flattened
    return df;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60152183

复制
相关文章
在pandas中遍历DataFrame行
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
用户7886150
2020/12/26
3.3K0
pandas行转列
需求 原始文件 Year Country medal no of medals 1896 Afghanistan Gold 5 1896 Afghanistan Silver 4 1896 Afghanistan Bronze 3 1896 Algeria Gold 1 1896 Algeria Silver 2 1896 Algeria Bronze 3 目标 Year Country Gold Silver Bronze
jiewuyou
2022/09/29
6150
python pandas fillna_pandas删除行
DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
全栈程序员站长
2022/09/22
1.5K0
pandas读取txt---按行输入按行输出
 1.pandas读取txt---按行输入按行输出 import pandas as pd # 我们的需求是 取出所有的姓名 # test1的内容 ''' id name score 1 张三 100 2 李四 99 3 王五 98 ''' test1 = pd.read_table("test1.txt") # 这个是带有标题的文件 names = test1["name"] # 根据标题来取值 print(names) ''' 张三 李四 王五 ''' # test2的内容 ''' 4 All
汀丶人工智能
2022/12/21
1.2K0
如何遍历pandas当中dataframe的行
现在需要遍历上面DataFrame的行。对于每一行,都希望能够通过列名访问对应的元素(单元格中的值)。也就是说,需要类似如下的功能:
马哥Python
2019/06/27
4K0
对比Excel,Python pandas删除数据框架中的行
对于Excel来说,删除行是一项常见任务。本文将学习一些从数据框架中删除行的技术。
fanjy
2022/04/13
4.7K0
对比Excel,Python pandas删除数据框架中的行
使用pandas筛选出指定列值所对应的行
该方法其实就是找出每一行中符合条件的真值(true value),如找出列A中所有值等于foo
星星在线
2020/05/22
19.2K0
pandas中的loc和iloc_pandas获取指定数据的行和列
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/178799.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
10.4K0
pandas中的loc和iloc_pandas获取指定数据的行和列
pandas_profiling:一行代码生成你的数据分析报告
笔者最近发现一款将pandas数据框快速转化为描述性数据分析报告的package——pandas_profiling。一行代码即可生成内容丰富的EDA内容,两行代码即可将报告以.html格式保存。笔者当初也是从数据分析做起的,所以深知这个工具对于数据分析的朋友而言极为方便,在此特地分享给大家。
Datawhale
2019/08/27
2.2K0
pandas_profiling:一行代码生成你的数据分析报告
pandas_profiling:1行代码即可生成详细的数据分析报告
Python是程序员和数据科学家最常用的编程语言之一。程序员喜欢Python是因为它简单但是功能强大。数据科学家喜欢Python,因为大多数机器学习和深度学习库都在Python中可用。
deephub
2021/03/25
6380
pandas_profiling:1行代码即可生成详细的数据分析报告
pandas_profiling:一行代码生成你的数据分析报告
笔者最近发现一款将pandas数据框快速转化为描述性数据分析报告的package——pandas_profiling。一行代码即可生成内容丰富的EDA内容,两行代码即可将报告以.html格式保存。笔者当初也是从数据分析做起的,所以深知这个工具对于数据分析的朋友而言极为方便,在此特地分享给大家。
石晓文
2019/10/11
7740
在Vim/Vi中删除行、多行、范围、所有行及包含模式的行
使用linux服务器,免不了和vi编辑打交道,命令行下删除数量少还好,如果删除很多,光靠删除键一点点删除真的是头痛,还好Vi有快捷的命令可以删除多行、范围。
子润先生
2021/06/24
110K0
如何在矩阵的行上显示“其他”【2】
这个显示结果虽然达到了基础的目的,但并不是很理想。很明显,我们想的是让others在最后一行:
陈学谦
2021/11/15
1.6K0
如何在矩阵的行上显示“其他”【1】
思路上其实非常简单:通过构建一个新的表,将销售额度量值放进去,排序,前10名用原先的类别,后面的都替换为others,拖到表中排序即可。
陈学谦
2021/11/15
1.9K0
pandas列合并为一行
将dataframe利用pandas列合并为一行,类似于sql的GROUP_CONCAT函数。例如如下dataframe
机器学习和大数据挖掘
2019/07/01
2K0
HBuilder快速生成代码行的技巧
1.在body内输入div.box按下tab键 效果: <div class="box"></div> ---- 2.在body内输入div#box按下tab键 效果: <div id="box"></div> ---- 3.在body内输入ul>li{旺财}*3按下tab键 效果: <ul> <li>旺财</li> <li>旺财</li> <li>旺财</li> </ul> ---- 4.在body内输入div>a[href='#']{小强}*3按下tab键 效果: <
杨校
2020/06/08
1.1K0
Pandas DataFrame显示行和列的数据不全
pd.set_option('display.max_columns', None)
用户7886150
2020/12/26
6.8K0
用过Excel,就会获取pandas数据框架中的值、行和列
至此,我们已经学习了使用Python pandas来输入/输出(即读取和保存文件)数据,现在,我们转向更深入的部分。
fanjy
2021/11/29
19.3K0
用过Excel,就会获取pandas数据框架中的值、行和列
点击加载更多

相似问题

pandas根据其他行的和/差添加新行

19

删除Pandas中重复排列的行

23

是否向引用其他行的pandas数据框添加新行?

16

遍历Pandas DataFrame中的行并生成新列

21

如何在Pandas数据帧中的其他行的计算中创建新行?

55
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文