提问者:小点点

如何合并数据框架中满足条件的行中的列,同时删除行


我认为我不能用groupby()agg()来解决这个问题,就像这些问题(问题1,问题2)一样。

我有一个pandas.dataframe,它有一个标识符列(id_code)和一些信息列(信息1信息2)。 我需要收集一些识别信息。 这意味着一些必须被删除,并且它们的信息必须被添加到特定的其他行中。

为了说明我的问题,我编造了一些东西:

import pandas as pd

inp = [{'ID_Code':1,'information 1':list(x * 3 for x in range(2, 5)),'information 2':list(x / 3 for x in range(2, 5))},
       {'ID_Code':2,'information 1':list(x * 0.5 for x in range(2, 5)),'information 2':list(x / 2 for x in range(2, 5))},
       {'ID_Code':3,'information 1':list(x * 0.2 for x in range(25, 29)),'information 2':list(x / 1 for x in range(2, 5))},
       {'ID_Code':4,'information 1':list(x * 0.001 for x in range(102, 105)),'information 2':list(x / 12 for x in range(2, 5))},
       {'ID_Code':5,'information 1':list(x * 12 for x in range(15, 17)),'information 2':list(x / 24 for x in range(2, 5))},
       {'ID_Code':6,'information 1':list(x * 42 for x in range(2, 9)),'information 2':list(x / 48 for x in range(2, 5))},
       {'ID_Code':7,'information 1':list(x * 23 for x in range(1, 2)),'information 2':list(x / 96 for x in range(2, 5))},
       {'ID_Code':8,'information 1':list(x * 7.8 for x in range(8, 11)),'information 2':list(x / 124 for x in range(2, 5))}]

df = pd.DataFrame(inp)

print(df)
Out:
       ID_Code                                                    information 1   information 2
    0        1                                                       [6, 9, 12]   [0.6666666666666666, 1.0, 1.3333333333333333]
    1        2                                                  [1.0, 1.5, 2.0]   [1.0, 1.5, 2.0]
    2        3                              [5.0, 5.2, 5.4, 5.6000000000000005]   [2.0, 3.0, 4.0]
    3        4  [0.10200000000000001, 0.10300000000000001, 0.10400000000000001]   [0.16666666666666666, 0.25, 0.3333333333333333]
    4        5                                                       [180, 192]   [0.08333333333333333, 0.125, 0.16666666666666666]
    5        6                               [84, 126, 168, 210, 252, 294, 336]   [0.041666666666666664, 0.0625, 0.08333333333333333]
    6        7                                                             [23]   [0.041666666666666664, 0.0625, 0.08333333333333333]
    7        8                                               [62.4, 70.2, 78.0]   [0.016129032258064516, 0.024193548387096774, 0.03225806451612903]

如果我想去掉id_code=1并将其信息存储在id_code=3中,并且去掉id_code=5id_code=7并将该信息存储在id_code=2中,那么我需要做什么,以便数据帧如下所示:

   ID_Code                                                    information 1   information 2
0        2                                    [180, 192, 23, 1.0, 1.5, 2.0]   [0.08333333333333333, 0.125, 0.16666666666666666, 0.041666666666666664, 0.0625, 0.08333333333333333, 1.0, 1.5, 2.0]
1        3                    [6, 9, 12, 5.0, 5.2, 5.4, 5.6000000000000005]   [2.0, 3.0, 4.0]
2        4  [0.10200000000000001, 0.10300000000000001, 0.10400000000000001]   [0.6666666666666666, 1.0, 1.3333333333333333, 0.16666666666666666, 0.25, 0.3333333333333333]
3        6                               [84, 126, 168, 210, 252, 294, 336]   [0.041666666666666664, 0.0625, 0.08333333333333333]
4        8                                               [62.4, 70.2, 78.0]   [0.016129032258064516, 0.024193548387096774, 0.03225806451612903]

共2个答案

匿名用户

您可以将id_code设置为索引,并使用列表理解更新:

df=df.set_index('ID_Code')
df.loc[3] = [x+y for x,y in zip(df.loc[1], df.loc[3])]
df = df.drop(1)

匿名用户

您可以有条件地更改df['id_code'],然后对列进行求和。

col = 'ID_Code'
cond = [df[col].eq(1),
       df[col].isin([5,7])]

outputs = [3,2]

df[col] = np.select(cond,outputs,default=df[col])

df1 = df.groupby(col).sum()

print(df1)


                                             information 1  \
ID_Code                                                      
2                            [1.0, 1.5, 2.0, 180, 192, 23]   
3            [6, 9, 12, 5.0, 5.2, 5.4, 5.6000000000000005]   
4        [0.10200000000000001, 0.10300000000000001, 0.1...   
6                       [84, 126, 168, 210, 252, 294, 336]   
8                                       [62.4, 70.2, 78.0]   

                                             information 2  
ID_Code                                                     
2        [1.0, 1.5, 2.0, 0.08333333333333333, 0.125, 0....  
3        [0.6666666666666666, 1.0, 1.3333333333333333, ...  
4          [0.16666666666666666, 0.25, 0.3333333333333333]  
6        [0.041666666666666664, 0.0625, 0.0833333333333...  
8        [0.016129032258064516, 0.024193548387096774, 0...