大佬教程收集整理的这篇文章主要介绍了通过python中的多个条件合并不同数量的行和列,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
更新的问题: 为什么它不合并 a_date
、a_par
、a_cons
、a_ment
和 a_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
具有值 1
或 2
,其中多行具有值 1
但只有一行(具有相同的connector
中的值) 具有值 2
以下是主要的合并规则:
将 type=1
的每一行与其对应的 (connector
) type=2
行合并。
由于 type=1
的多行具有相同的 connector
值,我不想只合并一行 type=1
而是所有它们,每行都有唯一的type==2
行。
由于某些列(例如 a_text
)遵循左连接逻辑,因此可以在不添加额外列的情况下覆盖值。
由于 var2
值不能通过左连接合并,因为它们对于行连接器值是非排他性的,我想要额外的列 (var1.1
,{{1 }}) 用于这些值 (var2.1
,pppp
)。
总而言之(并记住我只说具有相同连接器值的行):如果 jjjj
是 q_text
我首先要替换 None
中的值使用相应行的 a_text
值(见上表 a_text
和 tt
)(相同的连接器值),其次,想要附加一些其他值(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"=2
和 Perso
q_text
数据:这是核心数据集的表示。很遗憾,由于隐私法,我无法分享实际数据。
个人 | 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 |
此版本可确保附加列中的值不受影响。
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,请注明来意。