【发布时间】:2019-06-22 20:12:21
【问题描述】:
我有一个包含三列(CUST_ID、TOPIC、VALUE)的数据模型
data = pd.DataFrame({"CUST_ID":["C1", "C1", "C2", "C3", "C3"],
"TOPIC":["TOPIC1", "TOPIC2", "TOPIC2", "TOPIC1", "TOPIC2"],
"VALUE":[10, 15, 8, 5, 20]})
我想按 CUST_ID 分组,将“TOPIC”列转换为“TOPIC_a_VALUE”和“TOPIC_b_VALUE”两列
我知道用 SQL 怎么做,但是 pandas 怎么做呢?
SELECT CUST_ID,
MAX(CASE WHEN TOPIC = "TOPIC1" THEN VALUE ELSE 0 END) AS TOPIC_a_VALUE
MAX(CASE WHEN TOPIC = "TOPIC2" THEN VALUE ELSE 0 END) AS TOPIC_b_VALUE
FROM TABLE
GROUP BY CUST_ID
我想要的结果如下,
result = pd.DataFrame({"CUST_ID":["C1", "C2", "C3"],
"TOPIC_a_VALUE":[10, np.nan, 5],
"TOPIC_b_VALUE":[15, 8, 20]})
【问题讨论】:
-
能否请您使用随机数据发布最终输出的样子
-
@Sumanth 我通过 pandas 数据框添加原始数据和结果
-
原始数据中没有
TOPIC = "a",请添加以便我们复制 -
@anky_91 我修改错字,谢谢
标签: sql python-3.x pandas group-by