我想根据条件在数据框中添加一个新列,并将其他列的名称作为值。
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/