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

2024-05-16 19:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想转换如下数据帧:

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循环。什么是适当的Python(熊猫补药?)怎么做?你知道吗


Tags: 数据eventidfortypecount补药
2条回答

这可以分为两部分。你知道吗

解决方案

df.set_index(
    [‘id’, ‘event_type’]
)[‘count’].unstack(
    fill_value=0
).assign(**{
    ‘a < b’: lambda d: d.eval(‘a < b’)
})

嗯,不确定这是否正是你需要的,或者它是否必须比这更灵活。然而,这将是一种方法——假设丢失的值可以被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

相关问题 更多 >