python - Python:如何从数据框列中的 SQL 片段解析列名称
问题描述
数据框包含一个ID和CONDITION这是一个 SQL 片段
|ID|CONDITION |
|--|------------------------------------------------------------------------|
|1 |STATUS = "ABCD" |
|1 |STATUS = "DEFG" |
|1 |CASE WHEN STATUS = "XYZ" AND MOD = 1 THEN "CORRECT" ELSE "INCORRECT" END|
|2 |CODEX = 100 |
要求是从 SQL CONDITION中解析出列名并创建ID和列的唯一组合
Am expecting
|ID|COLUMN |
|--|-------|
|1 |STATUS |
|1 |MOD |
|2 |CODEX |
编辑:在条件列中,我们编写相当于 SQL 的文本,并将其作为列附加到 sql。输出为三行,因为 ID = 1 的第一行和第二行仅使用一个条件(列)STATUS。所以对于 ID = 1,列列表将是 STATUS 和 MOD。对于 ID=2,它是 CODEX。
解决方案
你可以试试这个:
import pandas as pd
# Setup
df = pd.DataFrame(
{
"ID": [1, 1, 1, 2],
"CONDITION": [
'STATUS = "ABCD"',
'STATUS = "DEFG"',
'CASE WHEN STATUS = "XYZ" AND MOD = 1 THEN "CORRECT" ELSE "INCORRECT" END',
"CODEX = 100",
],
}
)
KEYWORDS = ("STATUS", "MOD", "CODEX") # Add more keywords as needed
new_df = pd.DataFrame({"ID": [], "COLUMN": []})
# Iterate to find matching rows
for keyword in KEYWORDS:
temp_df = df.loc[df["CONDITION"].str.contains(keyword), ["ID"]]
temp_df["COLUMN"] = keyword
new_df = pd.concat([new_df, temp_df])
# Clean-up
new_df["ID"] = new_df["ID"].astype(int)
new_df = new_df.drop_duplicates().reset_index(drop=True)
print(new_df)
# Outputs
ID COLUMN
0 1 STATUS
1 1 MOD
2 2 CODEX
推荐阅读
- intellij-idea - 如何在 IntelliJ 中隐藏检查小部件
- kotlin - 无法使用 gradle 导入 kotlin.test.Test
- java - 不扩展 JavaPlugin
- reactjs - 基于副作用的反应测试子组件
- java - Spring Boot WireMock junit5 不模拟外部调用
- javascript - 导航栏在向下滚动时隐藏,在向上滚动时显示但保留移动整页菜单
- c# - 如何将类添加到我自己的控制台应用程序项目中
- javascript - 使用 Google Apps 脚本将多个 CSV 文件导入 Google 表格
- terraform - terraform 销毁 arm 模板资源,但资源仍然存在?
- google-apps-script - Google 应用程序脚本 URL 更改且无法打开