我想像这样转换数据框:
id event_type count
1 "a" 3
1 "b" 5
2 "a" 1
3 "b" 2
像这样的数据框:
id a b a > b
1 3 5 0
2 1 0 1
3 0 2 0
不使用 for 循环。什么是正确的 pythonic(Pandas-tonic?)方法?
请您参考如下方法:
嗯,不确定这是否正是您所需要的,或者它是否必须比这更灵活。但是,这将是一种方法 - 假设缺失值可以用 0 替换。
import pandas as pd
from io import StringIO
# Creating and reading the data
data = """
id event_type count
1 "a" 3
1 "b" 5
2 "a" 1
3 "b" 2
"""
df = pd.read_csv(StringIO(data), sep='\s+')
# Transforming
df_ = pd.pivot_table(df, index='id', values='count', columns='event_type') \
.fillna(0).astype(int)
df_['a > b'] = (df_['a'] > df_['b']).astype(int)
df_ 将采用以下形式:
event_type a b a > b
id
1 3 5 0
2 1 0 1
3 0 2 0
