【问题标题】:Determine counts for each column by label按标签确定每列的计数
【发布时间】:2020-07-12 08:47:34
【问题描述】:

我正在使用一个非常大的 (308801, 256) dataframe。在dataframe 中有一个ON_TIME 列,其中包含值1 或0(是的,我们准时交货,或者否,我们没有)。

我想为每一列计算每个值是 1 或 0 的次数。示例数据集如下所示:

| Delivery_Type | Delivery_Driver | ON_TIME |
|:-------------:|:---------------:|:-------:|
|       A       |    Wundermahn   |    1    |
|       B       |    Wundermahn   |    0    |
|       B       |    Wundermahn   |    0    |
|       A       |    Jon Skeet    |    1    |
|       C       |    Jon Skeet    |    1    |
|       A       |    Wundermahn   |    0    |

我想要一个数据集,对于每一列,如下所示:

| Delivery_Type | ON_TIME_1 | ON_TIME_0 |
|:-------------:|:---------:|:---------:|
|       A       |     2     |     1     |
|       B       |     0     |     2     |
|       C       |     1     |     0     |

我知道在 SQL 中,我可以这样做:

SELECT
    DELIVERY_TYPE,
    SUM(CASE WHEN ON_TIME = 1 THEN 1 ELSE 0 END AS ON_TIME_1) AS ON_TIME_1,
    SUM(CASE WHEN ON_TIME = 0 THEN 1 ELSE 0 END AS ON_TIME_0) AS ON_TIME_0
FROM
    dataframe
GROUP BY
    DELIVERY_TYPE

但是我如何在 Python 中做到这一点? 我试过了:

for col in df:
    temp = df[col].groupby('ON_TIME')
    print(temp)

但这不起作用。如何在 pandas 中达到预期的效果?

【问题讨论】:

标签: python pandas


【解决方案1】:

pd.crosstabDataFrame.add_prefix 一起使用:

df_count = (pd.crosstab(df['Delivery_Type'], df['ON_TIME'], colnames=[None])
              .add_prefix('ON_TIME_')
              .reset_index())
print(df_count)

  Delivery_Type  ON_TIME_0  ON_TIME_1
0             A          1          2
1             B          2          0
2             C          0          1

【讨论】:

    猜你喜欢
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2022-01-06
    • 2022-01-09
    • 2022-11-14
    • 2018-05-13
    相关资源
    最近更新 更多