当前位置: 首页 > 知识库问答 >
问题:

基于优先级修改数据帧

梁晋鹏
2023-03-14

我有一个这样的df:

ID   A1    A2     A3    A4    A5
1    1            2            3
2    1     2             3
3    2     1 
4    3            1            2
5

对于每个ID,我有5列A1到A5(实际上我有更多),并且这些值是特定ID的最高优先级。

例如:ID 1将A1、A3和A5作为优先级,ID 3只有2个A2和A1,ID 5没有优先级

合成DF

ID Priority_1  Priority_2  Priority_3
1    A1            A3         A5
2    A1            A2         A4
3    A2            A1   
4    A3            A5         A1
5

我尝试使用meltpivot使用这个和这个以及更多的方法来实现相同的功能,但无法获得相同的结果df。

这方面的任何帮助或我这边的清晰度!!

共有1个答案

王凯旋
2023-03-14

使用DataFrame.melt,通过DataFrame.sort_values进行排序,并通过DataFrame.dropna删除缺失的行,然后添加用于通过布尔索引过滤的新列和Series.le小于或等于和最后使用DataFrame.pivotDataFrame.add_prefix,最后添加DataFrame.reindex对于仅添加了缺失行ID

N = 3
df1 = df.melt('ID').sort_values(['ID','value']).dropna(subset=['value'])
df1['new'] = df1.groupby('ID').cumcount().add(1)
df1 = df1[df1['new'].le(N)]

df2 = df1.pivot('ID','new','variable').add_prefix('Priority_').reindex(df['ID'])
print (df2)
new Priority_1 Priority_2 Priority_3
ID                                  
1           A1         A3         A5
2           A1         A2         A4
3           A2         A1        NaN
4           A3         A5         A1
5          NaN        NaN        NaN
 类似资料:
  • 非常感谢您抽出时间!

  • 我有一个TestNG Dataprovider测试,如下所示: 输入csv 读者 测验 有许多输入文件,每个测试都包含一个优先级。我想单独运行优先级为1的测试。 在没有数据提供者的情况下,我可以使用下面的IMethodInterceptor过滤测试。 样品测试: 由于数据提供者的优先级是动态的,因此我无法根据优先级过滤测试。 不应执行其他测试,而应跳过其他测试。

  • 优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。 相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。 基本的优先级需要记住: 指针最优,单目运算优于双目运算。如正负号。 先乘除(模),后加减。 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (

  • 我有一个在Google Cloud DataFlow上运行的Beam作业从BigQuery读取数据。当我运行作业时,作业需要几分钟的时间才能开始从(微小)表读取数据。结果表明,数据流作业发送的是一个BigQuery作业,该作业以批处理模式运行,而不是以交互模式运行。如何切换到在Apache Beam中立即运行?我在API中找不到一个方法来更改优先级。

  • 问题内容: 我的网页包含: 引用的样式表包含: 我在ID中有一张表格,希望单元格有一些填充。但是,引用的样式表优先于内联样式。我可以通过Firebug直观地看到这一点。如果我关闭Firebug中的指令,则向左填充将生效。 我该如何上班? 问题答案: 正如其他人提到的那样,您有一个特异性问题。当确定两个规则中的哪一个优先时,CSS引擎会计算每个选择器中的s 数量。如果一个比另一个多,就使用它。否则,

  • 代码生成器用于将Blockly的程序转换为JavaScript,Python,PHP,Lua,Dart等。在为新块编写代码生成器时,最具挑战性的问题是处理操作顺序,以使生成的代码按预期执行。 圆括号 考虑下面的块组装。 如果生成器不知道运算符的优先级,则生成的JavaScript代码将是: alert(2*3+4); 这显然是不正确的,因为乘法运算符会撕裂加法,自己获取“ 3”。一种解决方案是将每