python - 根据行值使用其他列的名称填充新的 pandas 数据框列

标签 python pandas dataframe

我想根据条件在数据框中添加一个新列,并将其他列的名称作为值。

import pandas as pd
data = pd.DataFrame({
'customer': ['bob', 'jerry', 'alice', 'susan'],
'internet_bill': ['paid', 'past_due', 'due_soon', 'past_due'],
'electric_bill': ['past_due', 'due_soon', 'past_due', 'paid'],
'water_bill': ['paid', 'past_due', 'paid', 'paid']})

这是数据框。

    customer    internet_bill   electric_bill   water_bill
0   bob         paid            past_due        paid
1   jerry       past_due        due_soon        past_due
2   alice       due_soon        past_due        paid
3   susan       past_due        paid            paid

我想添加一个新列来总结什么是“past_due”。 这是期望的结果:

    customer    internet_bill   electric_bill   water_bill  past_due
0   bob         past_due        past_due        past_due    internet_bill, electric_bill, water_bill
1   jerry       past_due        due_soon        past_due    internet_bill, water_bill
2   alice       due_soon        past_due        paid        electric_bill
3   susan       past_due        paid            paid        internet_bill

我能够使用以下公式在 Excel 中执行此操作:

=TEXTJOIN(","&CHAR(10),TRUE,
IF(B2=Values!$A$1,$K$1,""),
IF(C2=Values!$A$1,$L$1,""),
IF(D2=Values!$A$1,$M$1,""))

最终,我的输出将是一个 excel 文件,供一些护士和医院工作人员跟进患者(不是收集账单!患者护理的东西)。我考虑过使用 Excel 编写器库来创建 .xlsx 并插入公式。

并且 - 我能够这样做来捕捉一个专栏,但我的直觉告诉我还有更好的方法。这是我过去常做的事情:

both['past_due'] = [
'internet_bill' if x == 'PAST_DUE' 
else 'None' for x in df['internet_bill']]

这基本上会检查每个目标列中的行,如果该行包含“PAST_DUE”,如果是,它将返回列名,移至下一列,检查逾期,添加列名。

我没有成功地通过搜索找到任何接近这个的东西,可能是因为在搜索栏中很难形成一个好的问题。我没有发现有人试图根据条件提取其他列名作为值的任何问题。

感谢您的帮助!

最佳答案

  >>>data['past_due'] = data.apply(lambda x: tuple(x[x == 'past_due'].index), 
  axis=1)
  >>>data
  Out[75]: 
    customer             ...                                  past_due
  0      bob             ...                          (electric_bill,)
  1    jerry             ...               (internet_bill, water_bill)
  2    alice             ...                          (electric_bill,)
  3    susan             ...                          (internet_bill,)
  [4 rows x 5 columns]

关于python - 根据行值使用其他列的名称填充新的 pandas 数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56878337/

相关文章:

python - Python 中的 While 循环替代方案

python - Pandas :从csv文件中获取特定列

python - 如何在pylab(pyplot)中使用阶梯线(阶梯曲线)填充两种不同颜色的区域?

python - np.concatenate() 二维数组而不是一维

python - 导入文本文件 : No Columns to parse from file

python - 给定外部订单,按日期时间月份的 Pandas 订单行

r - 基于向量键合并数据帧

python - 函数所需的整数

python - Pandas 按一列的类别在所有表中出现唯一值的频率

r - Data.Frame 到带有彩色文本的 PDF/HTML 表格