【问题标题】:Transform Multiple Columns Into One With Pandas使用 Pandas 将多列转换为一列
【发布时间】:2017-12-27 15:46:50
【问题描述】:

我有一个结构如下的数据框:

我想知道在 pandas 中创建一个新列“stage”的最有效方法是什么,该列从四列中提取任何不是“None”的值并将该值用于“stage”列. 在 stage 列提取出每一行中不是 None 的任何值之后,可以删除剩余的四列。

下面是所涉及的每列的唯一值的另一个快照:

请注意,有问题的列中的值是字符串类型,而 None 实际上不是 Nonetype。

【问题讨论】:

  • 你介意分享一个实际的数据框和代码而不是图片吗?

标签: python pandas dataframe apply series


【解决方案1】:
df['New']=df[['A','B','C']].replace('None','').sum(1)
df
Out[1477]: 
      A     B     C New
0  None     B  None   B
1     A  None  None   A
2  None  None     C   C

数据输入

df=pd.DataFrame({'A':['None','A','None'],'B':['B','None','None'],'C':['None','None','C']})

【讨论】:

  • 谢谢!那行得通。我不明白代码的 .sum(1) 部分。你能解释一下那里发生了什么吗?
  • @KeenanBurke-Pitts sum(1),正在逐行对df求和,它是字符串,它将它们连接在一起:-)(PS:我将所有None替换为'')
  • @KeenanBurke-Pitts yw~ 快乐编码
【解决方案2】:

考虑combine_first,假设None 不是字符串文字'None'

df['stage'] = df['doggo'].combine_first(df['floorfer'])\
                         .combine_first(df['pupper'])\ 
                         .combine_first(df['puppo'])

或者,对于 DRY-er 方法,使用reduce

from functools import reduce
...

df['stage'] = reduce(lambda x,y: x.combine_first(y), 
                     [df['doggo'], df['floorfer'], df['pupper'], df['puppo']])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-19
    • 2021-06-22
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多