gpt4 book ai didi

python-3.x - 通过python中的多个条件合并不同数量的行和列

转载 作者:行者123 更新时间:2023-12-03 16:46:44 27 4
gpt4 key购买 nike

更新问题:为什么不合并a_date , a_par , a_cons , a_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以下是主要合并 规则:
  • 合并 type=1 的每一行与其对应的 ( connector ) type=2排。
  • 由于 type=1 的多行有相同的connector值,我不想只合并一行 type=1但所有的人,每个人都有鞋底type==2排。
  • 由于某些列(例如 a_text )遵循左连接逻辑,因此可以在不添加额外列的情况下覆盖值。
  • var2值不能通过左连接合并,因为它们对于行连接器值是非排他性的,我希望为这些值( var1.1var2.1 )有额外的列( ppppjjjj )。

  • 总而言之(并记住我只说具有相同连接器值的行):如果 q_textNone我首先要替换 a_text 中的值与 a_text值(见上表 ttuu )对应行(相同的连接器值),其次,想要附加一些其他值( var1var2 )作为新列。
    此外,还有具有唯一 connector 的行不会匹配的值。我想保留这些行。
    我只想“放下” type=2与其对应的行合并 type=1行**(s)**。换句话说:我不想保留 type=2 匹配的行并合并到它们对应的(连接器) type=1行。我想保留所有其他行。
    @victor__von__doom 的解决方案在这里
    merging varying number of rows by multiple conditions in python
    当我最初想保留所有 "type"=2 时得到了回答列(值)。
    我使用的代码 : 合并 Perso , q_texta_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)
    数据 :这是核心数据集的表示。不幸的是,由于隐私法,我无法分享实际数据。


    佩索
    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
    没有任何

    特尔德
    er
    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?一世
    没有任何
    特雷
    第三节
    关于
    2001-04-16.1.a9
    333333333
    2

    在 d
    6-1/6/2005-09-03/1
    1992-2006年
    没有任何
    434
    '嗯'
    d-g

    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'
    d-g

    2001-11-12
    时间
    7431

    l?一世
    泰德
    没有任何
    第三节

    2001-11-12.1.s7
    999999999
    1

    没有任何
    1-6/4/2007-11-01/1
    1993-2010年
    2353
    没有任何
    没有任何
    d-g

    2007-11-01
    Thrj
    444
    泰德
    湖一世
    格格
    没有任何
    三德
    我们
    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', 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)
    原始数据帧:
       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-3.x - 通过python中的多个条件合并不同数量的行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66629337/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com