Skip to main content
 首页 » 编程设计

python之在不使用 for 循环的情况下重新格式化数据框

2025年05月04日21lhb25

我想像这样转换数据框:

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