加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python Pandas在数据帧中合并相同的名称列

发布时间:2020-12-20 12:31:21 所属栏目:Python 来源:网络整理
导读:所以我有一些我正在尝试使用的CSV文件,但是其中一些文件具有多个具有相同名称的列. 例如,我可以有这样的csv: ID Name a a a b b1 test1 1 NaN NaN "a" NaN2 test2 NaN 2 NaN "a" NaN3 test3 2 3 NaN NaN "b"4 test4 NaN NaN 4 NaN "b" 加载到pandasis给我这
所以我有一些我正在尝试使用的CSV文件,但是其中一些文件具有多个具有相同名称的列.

例如,我可以有这样的csv:

ID   Name   a    a    a     b    b
1    test1  1    NaN  NaN   "a"  NaN
2    test2  NaN  2    NaN   "a"  NaN
3    test3  2    3    NaN   NaN  "b"
4    test4  NaN  NaN  4     NaN  "b"

加载到pandasis给我这个:

ID   Name   a    a.1  a.2   b    b.1
1    test1  1    NaN  NaN   "a"  NaN
2    test2  NaN  2    NaN   "a"  NaN
3    test3  2    3    NaN   NaN  "b"
4    test4  NaN  NaN  4     NaN  "b"

我想要做的是将这些相同的名称列合并为1列(如果有多个值保持这些值分开),我理想的输出将是这个

ID   Name   a      b  
1    test1  "1"    "a"   
2    test2  "2"    "a"
3    test3  "2;3"  "b"
4    test4  "4"    "b"

所以想知道这是否可行?

解决方法

你可以在axis = 1上使用groupby,并尝试类似的东西

>>> def sjoin(x): return ';'.join(x[x.notnull()].astype(str))
>>> df.groupby(level=0,axis=1).apply(lambda x: x.apply(sjoin,axis=1))
  ID   Name        a  b
0  1  test1      1.0  a
1  2  test2      2.0  a
2  3  test3  2.0;3.0  b
3  4  test4      4.0  b

而不是使用.astype(str),你可以使用你想要的任何格式化运算符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读