为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

紫衣仙女 2023-02-07 13:52:11
背景资料这个问题和我之前的问题密切相关。不幸的是,虽然构成了一个一般性的例子,但它不够具体,无法应用于我的个人问题。这就是为什么这个问题更具体。示例 - 代码片段import pandas as pdimport numpy as npinp = [{'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 不再是列而是索引。这是我在上一个问题中没有指定的问题。
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

它对我有用, 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()


查看完整回答
反对 回复 2023-02-07
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信