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

从一个数据框中合并具有相似数据的列

从一个数据框中合并具有相似数据的列

繁花不似锦 2021-12-16 15:13:27
我有一个包含重复列的表,我想将其加入一个单列。它们共享相同的列名,但我想将具有相同标题的任何列合并为一个。我曾尝试使用合并、连接等,但没有成功。data = [['a','a','c'],['a','b','d'],['a','c','c']]df = pd.DataFrame(data,columns=['col1','col2','col1'])dfco1 col2 col1a     a    ca     b    da     c    c 我希望从这一点开始有两列“col1 with a,a,a,c,d,c”和“col2 a,b,c,nan,nan,nan”
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

首先stack,然后unstack。我们需要做更多的工作,然后才能拆开数据。


u = df.stack()

(u.to_frame()

  .set_index(u.groupby(u.index).cumcount(), append=True)

  .unstack(1)

  .sort_index(level=1)[0]

  .reset_index(drop=True))


  col1 col2

0    a    a

1    a    b

2    a    c

3    c  NaN

4    d  NaN

5    c  NaN

另一种选择是groupby,to_dict和重建。


dct = (df.groupby(df.columns, axis=1)

                          # x.values.ravel().tolist()

         .apply(lambda x: [z for y in x.values for z in y])

         .to_dict())

pd.DataFrame.from_dict(dct, orient='index').T



  col1  col2

0    a     a

1    c     b

2    a     c

3    d  None

4    a  None

5    c  None


查看完整回答
反对 回复 2021-12-16
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

melt groupby 和 concat


d={x : y['value'].reset_index(drop=True) for x,y in df.melt().groupby('variable')}

df=pd.concat(d,1)

df

Out[39]: 

  col1 col2

0    a    a

1    a    b

2    a    c

3    c  NaN

4    d  NaN

5    c  NaN


查看完整回答
反对 回复 2021-12-16
  • 2 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

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