在满足条件的适应数据框中合并行中的列,同时删除行

背景资料


这个问题和我之前的问题密切相关。不幸的是,虽然构成了一个一般性的例子,但它不够具体,无法应用于我的个人问题。这就是为什么这个问题更具体。


示例 - 代码片段


import pandas as pd

import numpy as np


inp = [{'ID_Code':1,'information 1':[10,22,44],'information 2':[1,0,1]},

       {'ID_Code':2,'information 1':[400,323],'information 2':[1,1]},

       {'ID_Code':2,'information 1':[243],'information 2':[0]},

       {'ID_Code':2,'information 1':[333,555],'information 2':[0]},

       {'ID_Code':3,'information 1':[12,27,43,54],'information 2':[1,0,1,1]},

       {'ID_Code':3,'information 1':[31,42,13,14],'information 2':[1,0,0,0]},

       {'ID_Code':3,'information 1':[14,24,34,14],'information 2':[1,0,1,1]},

       {'ID_Code':4,'information 1':[15,25,33,44],'information 2':[0,0,0,1]},

       {'ID_Code':5,'information 1':[12,12,13,14],'information 2':[1,1,1,0]},

       {'ID_Code':5,'information 1':[12,12,13,24],'information 2':[1,0,1,1]},

       {'ID_Code':5,'information 1':[21,22,23,14],'information 2':[1,1,1,1]},

       {'ID_Code':6,'information 1':[10,12,23,4],'information 2':[1,0,1,0]},

       {'ID_Code':7,'information 1':[112,212,143,124],'information 2':[0,0,0,0]},

       {'ID_Code':7,'information 1':[211,321],'information 2':[1]},

       {'ID_Code':7,'information 1':[431],'information 2':[1,0]},

       {'ID_Code':8,'information 1':[1,2,3,4],'information 2':[1,0,0,1]}]



df = pd.DataFrame(inp)


df1=df.groupby("ID_Code")["information 1"].apply(list).to_frame()

df2=df.groupby("ID_Code")["information 2"].apply(list).to_frame()

df3=pd.concat([df1, df2],axis=1, sort=False)


其中 ID_Code 不再是列而是索引。这是我在上一个问题中没有指定的问题。


紫衣仙女
浏览 90回答 1
1回答

千万里不及你

它对我有用, Datanovice在上一个问题中给出的答案对索引进行了一些更改。正如问题所述,问题在于'ID_Code'成为索引而不是列。所以我的解决方案涉及添加一个具有唯一 ID_Code 的列。为此,我找到了两种可能的方法。解决方案 1.unique()与 as .unique() 结合使用会pd.Dataframe()返回一个 numpy.ndarray,它必须再次转换为 Dataframe。df4 = pd.DataFrame(df['ID_Code'].unique(),columns=['ID_Code'],index=df['ID_Code'].unique())df5 = pd.concat([df4,df3],axis=1)col = 'ID_Code'cond = [df5[col].eq(1),       df5[col].isin([5,7])]outputs = [3,2]df5[col] = np.select(cond,outputs,default=df5[col])df6 = df5.groupby(col).sum()方案二用于将.reset_index()ID_Code 从索引中移出到单独的列中。df3 = df3.reset_index()col = 'ID_Code'cond = [df3[col].eq(1),       df3[col].isin([5,7])]outputs = [3,2]df3[col] = np.select(cond,outputs,default=df3[col])df4 = df3.groupby(col).sum()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python