Pandas:如何将多列中的值合并为一列


您可以使用以下方法将 pandas DataFrame 的多个列中的值分组为单个列:

方法一:按默认列顺序合并值

 df[' coalesce '] = df. bfill (axis= 1 ). iloc [:, 0]

方法2:使用特定列顺序合并值

 df[' coalesce '] = df[[' col3 ', ' col1 ', ' col2 ']]. bfill (axis= 1 ). iloc [:, 0]

以下示例展示了如何在实践中使用以下 pandas DataFrame 的每种方法:

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' points ': [np.nan, np.nan, 19, np.nan, 14],
                   ' assists ': [np.nan, 7, 7, 9, np.nan],
                   ' rebounds ': [3, 4, np.nan, np.nan, 6]})

#view DataFrame
print (df)

   points assists rebounds
0 NaN NaN 3.0
1 NaN 7.0 4.0
2 19.0 7.0 NaN
3 NaN 9.0 NaN
4 14.0 NaN 6.0

方法一:按默认列顺序合并值

以下代码展示了如何将得分、助攻和篮板列中的值合并到单个列中,并使用三列中的第一个非零值作为合并值:

 #create new column that contains first non-null value from three existing columns 
df[' coalesce '] = df. bfill (axis= 1 ). iloc [:, 0]

#view updated DataFrame
print (df)

   points assists rebounds coalesce
0 NaN NaN 3.0 3.0
1 NaN 7.0 4.0 7.0
2 19.0 7.0 NaN 19.0
3 NaN 9.0 NaN 9.0
4 14.0 NaN 6.0 14.0

以下是选择合并列中的值的方式:

  • 第一行:第一个非零值是3.0
  • 第二行:第一个非零值是7.0
  • 第三行:第一个非零值是19.0
  • 第四行:第一个非零值是9.0
  • 第五行:第一个非零值是14.0

方法2:使用特定列顺序合并值

下面的代码展示了如何通过按以下顺序分析列来合并三列中的值:助攻、篮板、得分。

 #coalesce values in specific column order
df[' coalesce '] = df[[' assists ', ' rebounds ', ' points ']]. bfill (axis= 1 ). iloc [:, 0]

#view updated DataFrame
print (df)

   points assists rebounds coalesce
0 NaN NaN 3.0 3.0
1 NaN 7.0 4.0 7.0
2 19.0 7.0 NaN 7.0
3 NaN 9.0 NaN 9.0
4 14.0 NaN 6.0 6.0

以下是用于决定将哪个值放置在合并列中的逻辑:

  • 如果辅助列中的值不为零,则使用该值。
  • 否则,如果退回列中的值不为零,则使用该值。
  • 否则,如果列中的值不为零,则使用该值。

注意:您可以在此处找到bfill()函数的完整文档。

其他资源

以下教程解释了如何在 pandas 中执行其他常见操作:

如何在 Pandas 中合并两列
如何对 Pandas 中的特定列求和
如何在 Pandas 中按多列排序

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注