id3*_*678 5 merge join left-join python-3.x pandas
更新的问题:为什么它不合并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
Run Code Online (Sandbox Code Playgroud)
目标:数据集应该是什么样子
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
Run Code Online (Sandbox Code Playgroud)
逻辑:柱type具有任一值1或2与具有值的多个行1,但只有一个行(在相同值connector)具有值2
以下是主要的合并规则:
将 的每一行type=1与其对应的 ( connector)type=2行合并。
由于多行type=1具有相同的connector值,我不想只合并一行,type=1而是将所有行合并,每行只合并type==2一行。
由于某些列(例如a_text)遵循左连接逻辑,因此可以在不添加额外列的情况下覆盖值。
由于var2价值观不能由左加入,因为他们都是非排他性相对于行连接器值被合并,我想有额外的列(var1.1,var2.1这些值)( ,)。ppppjjjj
总而言之(并记住我只说具有相同连接器值的行):如果q_text是Nonei 首先,想要用相应行a_text的a_text值(见上表tt和uu)(相同连接器值)替换中的值其次,想要将与新列完全相同的对应行的一些其他值(var1和var2)附加到新列中。此外,有些行具有connector不会匹配的唯一值。我想保留这些行。
我只想“删除”type=2与其对应type=1行**(s)**合并的行。换句话说:我不想保留 type=2 匹配的行并合并到它们对应的(连接器)type=1行中。我想保留所有其他行。
当我最初想保留所有列(值)时,@victor__von__doom 的解决方案在这里
通过 python 中的多个条件合并不同数量的行得到了回答"type"=2。
我使用的代码:合并Perso,q_text和a_text
df.loc[df['type'] == 2, 'a_date'] = df['q_date']
df.loc[df['type'] == 2, 'a_par'] = df['par']
df.loc[df['type'] == 2, 'a_cons'] = df['cons']
df.loc[df['type'] == 2, 'a_ment'] = df['pret']
df.loc[df['type'] == 2, 'a_le'] = df['q_le']
my_cols = ['Perso', 'q_text','a_text', 'a_le', 'q_le', 'q_date', 'par', 'cons', 'pret', 'q_le', 'a_date','a_par', 'a_cons', 'a_ment', 'a_le']
df[my_cols] = df.sort_values(['connector','type']).groupby('connector')[my_cols].transform(lambda x: x.bfill())
df.dropna(subset=['a_text', 'Perso'],inplace=True)
df.reset_index(drop=True,inplace=True)
Run Code Online (Sandbox Code Playgroud)
数据:这是核心数据集的表示。不幸的是,由于隐私法,我无法分享实际数据。
| 佩索 | ID | 每 | q_le | a_le | 漂亮 | 标准杆 | 形式 | 日期 | 姓名 | IO_ID | 部分 | 区域 | q_text | 文本 | 国家 | 缺点 | 挖 | 连接器 | 类型 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 杰维斯 | 1-1/4/2001-11-12/1 | 1999-2009 | 没有任何 | 4325 | '米,h','d' | 周 | 三 | 2001-11-12 | 没有任何 | 345 | 重新 | s—H | 没有任何 | 写 | 特尔德 | 呃 | 2001-11-12.1.g9 | 999999999 | 2 |
| 标准 | 9-3/6/2003-10-14/1 | 1994-2004 | 没有任何 | 23 | 'sd,h' | DG | 三 | 2003-10-14 | 没有任何 | 34555 | 这 | l? 一世 | 没有任何 | 特雷 | 第三节 | 关于 | 2001-04-16.1.a9 | 333333333 | 2 |
| 在 d | 6-1/6/2005-09-03/1 | 1992-2006年 | 没有任何 | 434 | '嗯' | DG | 三 | 2005-09-03 | 没有任何 | 7313 | 德 | l? 一世 | 没有任何 | 特 | 红色 | dre | 2001-08-07.1.e4 | 111111111 | 2 |
| 没有任何 | 3-4/4/2000-07-07/1 | 1992-2006年 | 1223 | 没有任何 | '嗯' | 文件系统 | 三 | 2000-07-07 | 阈值 | 7413 | 德 | 滴滴 | 节拍 | 没有任何 | 三德 | 2001-07-06.1.j3 | 111111111 | 1 | |
| 没有任何 | 2-1/6/2001-11-12/1 | 1999-2009 | 1444 | 没有任何 | '米,h','d' | DG | 三 | 2001-11-12 | 时间 | 7431 | 德 | l? 一世 | 泰德 | 没有任何 | 第三节 | 2001-11-12.1.s7 | 999999999 | 1 | |
| 没有任何 | 1-6/4/2007-11-01/1 | 1993-2010年 | 2353 | 没有任何 | 没有任何 | DG | 三 | 2007-11-01 | Thrj | 444 | 泰德 | 湖 一世 | 格格 | 没有任何 | 三德 | 我们 | 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', 0, 'US', 'other values'],
[9999, 2, None, 'tt', 'jjjj', 'pppp', 0, 'UK', 'no values'],
[1111, 2, None, 'uu', None, 'oo', 1, 'US', 'some values'],
[9999, 1, 'bb', None, 'yy', 'Rt', 1, 'UK', 'more values'],
[9999, 1, 'cc', None, 'zz', 'tR', 2, 'UK', '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','a_text','var1','var2','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)
Run Code Online (Sandbox Code Playgroud)
原始数据框:
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
Run Code Online (Sandbox Code Playgroud)
更新的数据框
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |