程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了通过python中的多个条件合并不同数量的行和列大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决通过python中的多个条件合并不同数量的行和列?

开发过程中遇到通过python中的多个条件合并不同数量的行和列的问题如何解决?下面主要结合日常开发的经验,给出你关于通过python中的多个条件合并不同数量的行和列的解决方法建议,希望对你解决通过python中的多个条件合并不同数量的行和列有所启发或帮助;

更新的问题: 为什么它不合并 a_datea_para_consa_menta_le。这些附加为没有值的列,但在原始数据集中它们有值。

这是数据集的样子

         connector   type   q_text   a_text   var1   var2 
   1        1111      1      aa       None    xx     ps
   2        9999      2      None     tt      jjjj   pppp
   3        1111      2      None     uu      None   oo
   4        9999      1      bb       None    yy     Rt
   5        9999      1      cc       None    zz     tR

目标:数据集应该是什么样子

         connector   q_text   a_text    var1   var1.1   var2   var2.1
   1        1111      aa        uu       xx     None     ps      oo
   2        9999      bb        tt       yy     jjjj     Rt      pppp
   3        9999      cc        tt       zz     jjjj     tR      pppp

逻辑:列 type 具有值 12,其中多行具有值 1 但只有一行(具有相同的connector 中的值) 具有值 2

以下是主要的合并规则:

  1. type=1 的每一行与其对应的 (connector) type=2 行合并。

  2. 由于 type=1 的多行具有相同的 connector 值,我不想只合并一行 type=1 而是所有它们,每行都有唯一的type==2 行。

  3. 由于某些列(例如 a_text)遵循左连接逻辑,因此可以在不添加额外列的情况下覆盖值。

  4. 由于 var2 值不能通过左连接合并,因为它们对于行连接器值是非排他性的,我想要额外的列 (var1.1,{{1 }}) 用于这些值 (var2.1,pppp)。

总而言之(并记住我只说具有相同连接器值的行):如果 jjjjq_text 我首先要替换 None 中的值使用相应行的 a_text 值(见上表 a_texttt)(相同的连接器值),其次,想要附加一些其他值(uu{ {1}}) 与新列完全相同的对应行。 此外,有些行具有不会匹配的唯一 var1 值。不过我想保留这些行。

我只想“删除”与其对应的 var2**(s)** 合并的 connector 行。换句话说:我不想保留 type=2 匹配的行并合并到它们对应的(连接器)type=2 行中。不过我想保留所有其他行。

@victor__von__doom 的解决方案在这里 merging varying number of rows by multiple conditions in python 当我最初想保留所有 type=1 列(值)时得到了回答。

我使用的代码:合并 type=1"type"=2Perso

q_text

数据:这是核心数据集的表示。很遗憾,由于隐私法,我无法分享实际数据。

@H_944_188@J Ws @H_944_188@S ts @H_944_188@在 d @H_944_188@无 @H_944_188@无 @H_944_188@无
个人 ID per q_le a_le pret par 表单 q_date 名称 IO_ID 部分 区域 q_text a_text 国家 缺点 dig 连接器 输入
1-1/4/2001-11-12/1 1999-2009 4325 'Mi,h','d' Cew 三个 2001-11-12 345 rede s — H wr ede 特德 e e r 2001-11-12.1.g9 999999999 2
9-3/6/2003-10-14/1 1994-2004 23 'sd,h' d-g 三个 2003-10-14 34555 l?我 Tre Thr ede 重新 2001-04-16.1.a9 333333333 2
6-1/6/2005-09-03/1 1992-2006 434 'uu h' d-g 三个 2005-09-03 7313 Thde l?我 T e Th rede dre 2001-08-07.1.e4 111111111 2
3-4/4/2000-07-07/1 1992-2006 1223 'uu h' dfs 三个 2000-07-07 Th r 7413 Thde Tddde Thd de 三德 2001-07-06.1.j3 111111111 1
2-1/6/2001-11-12/1 1999-2009 1444 'Mi,'d' d-g 三个 2001-11-12 T rj 7431 Thde l?我 Th dde Thr ede 2001-11-12.1.s7 999999999 1
1-6/4/2007-11-01/1 1993-2010 2353 d-g 三个 2007-11-01 Thrj 444 Thed l. Tgg gg 三德 我们 2001-06-11.1.g9 654982984 1

解决方法

使用附加列编辑 v2

此版本可确保附加列中的值不受影响。

c = ['connector','type','q_text','a_text','var1','var2','cumsum','country','others']
d = [[1111,1,'aa',None,'xx','ps','US','other values'],[9999,2,'tt','jjjj','pppp','UK','no values'],[1111,'uu','oo','some values'],'bb','yy','Rt','more values'],'cc','zz','tR','less values']]

import pandas as pd
pd.set_option('display.max_columns',NonE)
df = pd.DataFrame(d,columns=C)

print (df)

df.loc[df['type'] == 2,'var1.1'] = df['var1']
df.loc[df['type'] == 2,'var2.1'] = df['var2']

my_cols = ['q_text','var1.1','var2.1']

df[my_cols] = df.sort_values(['connector','type']).groupby('connector')[my_cols].transform(lambda x: x.bfill())

df.dropna(subset=['q_text'],inplace=TruE)
df.reset_index(drop=True,inplace=TruE)

print (df)

原始数据帧:

   connector  type q_text a_text  var1  var2  cumsum country        others
0       1111     1     aa   None    xx    ps       0      US  other values
1       9999     2   None     tt  jjjj  pppp       0      UK     no values
2       1111     2   None     uu  None    oo       1      US   some values
3       9999     1     bb   None    yy    Rt       1      UK   more values
4       9999     1     cc   None    zz    tR       2      UK   less values

更新数据帧

   connector  type q_text a_text var1 var2  cumsum country        others  var1.1 var2.1
0       1111     1     aa     uu   xx   ps       0      US  other values    None     oo 
1       9999     1     bb     tt   yy   Rt       1      UK   more values    jjjj   pppp 
2       9999     1     cc     tt   zz   tR       2      UK   less values    jjjj   pppp 

大佬总结

以上是大佬教程为你收集整理的通过python中的多个条件合并不同数量的行和列全部内容,希望文章能够帮你解决通过python中的多个条件合并不同数量的行和列所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: