连接 Python Pandas 中 if 语句的结果字符串

Posted

技术标签:

【中文标题】连接 Python Pandas 中 if 语句的结果字符串【英文标题】:Concatenate resulting strings from if statements in Python Pandas 【发布时间】:2021-12-18 05:13:15 【问题描述】:

我对 pandas、python 和 google colab 非常陌生,我刚刚花了 6 个多小时试图找到一种方法来完成我在 2 分钟内在 google 表格中完成的公式。

我想将 if 语句的结果连接到单个列中,就像我在“要修复的问题”列中所做的那样,如果列中出现“是”,则会出现问题,以便工人可以检查需要做什么。

在 Excel 和工作表中,我可以使用“&”加入 if 语句,但每当我尝试使用 pandas 连接时,都会弹出某种错误。我也尝试过使用这种格式的代码:

my_list = ['a', 'b', 'c', 'd']
my_string = ','.join(my_list)
# Output = 'a,b,c,d'

但它有点旋转数据并弄乱了周围的一切。

我在 google colab 环境中工作,使用 .ipynb 文件。

非常感谢您的关注和帮助。

【问题讨论】:

【参考方案1】:

使用melt:

out = df.melt(id_vars=['Car Id'], var_name='Things to fix', ignore_index=False) \
        .query("value == 'Yes'").groupby('Car Id')['Things to fix'] \
        .apply(lambda x: ','.join(x.str.extract(r'(\w+)\?', expand=False)))

out = df.merge(out, on='Car Id', how='left')

输出:

>>> out
   Car Id Problem with Key? Problem with windows? Problem in the engine?       Things to fix
0    1000               Yes                   Yes                    Yes  Key,windows,engine
1    1001                No                   Yes                     No             windows
2    1002                No                    No                     No                 NaN

设置:

data = 'Car Id': [1000, 1001, 1002],
        'Problem with Key?': ['Yes', 'No', 'No'],
        'Problem with windows?': ['Yes', 'Yes', 'No'],
        'Problem in the engine?': ['Yes', 'No', 'No']

df = pd.DataFrame(data)

【讨论】:

【参考方案2】:

为什么不这样?

df['tofix'] = df.apply(lambda r: ','.join([r.key*'key',r.win*'win',r.eng*'eng'])

【讨论】:

以上是关于连接 Python Pandas 中 if 语句的结果字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中映射 if 语句

Python Pandas 系列 if else 箱线图

Pandas 使用 If/Then/Else 语句在循环中抛出错误

在具有多个 if 语句的 Pandas Lambda 函数中使用 Apply

Pandas 中带有 if 语句的新列

在Pandas中使用Apply Lambda函数具有多个if语句