【问题标题】:How to extract information from the cell of a variable and put it inside duplicated row?如何从变量的单元格中提取信息并将其放入重复行中?
【发布时间】:2018-11-16 09:46:32
【问题描述】:

我有一个包含'UserID' 的数据集,用户'System' 使用的系统以及这两者的连接。以下是data set 的示例:

RolCatBR_IDMqes1.loc[0:15]

UserID            System         CONCAT A
0   ANTANAS  P1B_010, P2Z_010  P1B_010|ANTANAS
1   AWYGASC  P1B_010, P2Z_010  P1B_010|AWYGASC
2   CHENQIA  P1B_010, P2Z_010  P1B_010|CHENQIA
3   CHENQIA  P3Z_020, P3Z_030  P3Z_020|CHENQIA
4   DBORZUT  P1B_010, P2Z_010  P1B_010|DBORZUT
5   DURAKER  P1B_010, P2Z_010  P1B_010|DURAKER
6   JEBINDE  P1B_010, P2Z_010  P1B_010|JEBINDE
7   SMETTAN  P1B_010, P2Z_010  P1B_010|SMETTAN
8   TKAUL13  P3Z_020, P3Z_030  P3Z_020|TKAUL13
9   VATERCH  P3Z_020, P3Z_030  P3Z_020|VATERCH
10  ABUNNEN           P2Z_010  P2Z_010|ABUNNEN
11  AMILSKI           P2Z_010  P2Z_010|AMILSKI
12  ANMUE24           P2Z_010  P2Z_010|ANMUE24
13  BKAEPPL           P2Z_010  P2Z_010|BKAEPPL
14  BRUDERA           P2Z_010  P2Z_010|BRUDERA
15  CHRROMM           P2Z_010  P2Z_010|CHRROMM

例如:第一行[0],我需要取出第二个系统-P2Z_010,用相同的UserID创建新行并将系统信息-P2Z_010更新为CONCAT A .

     UserID   System         CONCAT A
0     ANTANAS  P1B_010    P1B_010|ANTANAS
0.5   ANTANAS  P2Z_010    P2Z_010|ANTANAS
1     AWYGASC  P1B_010    P1B_010|AWYGASC
1.5   AWYGASC  P2Z_010    P2Z_010|AWYGASC

我该怎么做?

【问题讨论】:

    标签: string python-3.x pandas data-manipulation data-cleaning


    【解决方案1】:

    这就是所谓的取消嵌套,我将str.splitstr.lenrepeat 一起使用

    s=df['System'].str.split(',')
    pd.DataFrame({'UserID':df.UserID.repeat(s.str.len()),'System':sum(s.tolist(),[]),'CONCATA':df.CONCATA.repeat(s.str.len())})
    Out[531]: 
                CONCATA   System   UserID
    0   P1B_010|ANTANAS  P1B_010  ANTANAS
    0   P1B_010|ANTANAS  P2Z_010  ANTANAS
    1   P1B_010|AWYGASC  P1B_010  AWYGASC
    1   P1B_010|AWYGASC  P2Z_010  AWYGASC
    2   P1B_010|CHENQIA  P1B_010  CHENQIA
    2   P1B_010|CHENQIA  P2Z_010  CHENQIA
    3   P3Z_020|CHENQIA  P3Z_020  CHENQIA
    3   P3Z_020|CHENQIA  P3Z_030  CHENQIA
    4   P1B_010|DBORZUT  P1B_010  DBORZUT
    4   P1B_010|DBORZUT  P2Z_010  DBORZUT
    5   P1B_010|DURAKER  P1B_010  DURAKER
    5   P1B_010|DURAKER  P2Z_010  DURAKER
    6   P1B_010|JEBINDE  P1B_010  JEBINDE
    6   P1B_010|JEBINDE  P2Z_010  JEBINDE
    7   P1B_010|SMETTAN  P1B_010  SMETTAN
    7   P1B_010|SMETTAN  P2Z_010  SMETTAN
    8   P3Z_020|TKAUL13  P3Z_020  TKAUL13
    8   P3Z_020|TKAUL13  P3Z_030  TKAUL13
    9   P3Z_020|VATERCH  P3Z_020  VATERCH
    9   P3Z_020|VATERCH  P3Z_030  VATERCH
    10  P2Z_010|ABUNNEN  P2Z_010  ABUNNEN
    11  P2Z_010|AMILSKI  P2Z_010  AMILSKI
    12  P2Z_010|ANMUE24  P2Z_010  ANMUE24
    13  P2Z_010|BKAEPPL  P2Z_010  BKAEPPL
    14  P2Z_010|BRUDERA  P2Z_010  BRUDERA
    15  P2Z_010|CHRROMM  P2Z_010  CHRROMM
    

    【讨论】:

    • 如果根据此示例我在数据集中有很多其他列,我必须将它们与您对 UserID 变量所做的类似:'UserID':df.UserID.repeat(s.str.len()),对吗?你能解释一下repeat中的代码是什么UserIDCONCATA吗?
    • @user21 按系统长度重复同一个用户,所以我们可以取消嵌套数据帧
    • 我无法执行这部分代码sum(s.tolist(),[]),因为TypeError: can only concatenate list (not "float") to list。我该怎么办?
    • @user21 更改为np.concatenate(s.values)
    • 如果我这样做,则会出现值错误:ValueError: all the input arrays must have same number of dimensions
    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2011-06-26
    • 2017-05-08
    • 2023-02-18
    • 2018-11-22
    相关资源
    最近更新 更多