【问题标题】:How to generate columns from count?如何从计数生成列?
【发布时间】:2022-07-26 22:05:24
【问题描述】:

我需要计算每一行中最常见的值,如果可能的话,我必须为每个值及其各自的计数创建列。

目前,我可以对每一行的值进行计数和分组。但是,我不知道是否可以为观察值生成列。

以下是数据示例:

chordType commonChord
triadeMaior, setima, triadeMenor, setimaMaior, triadeMaior, triadeMenor, triadeMenor, triadeMaior triadeMaior (3), triadeMenor (3), setima (1), setimaMaior (1)
triadeMenor, setima, triadeMaior, setimaMenor, triadeMaior, triadeMaior, setima, setima, setimaMenor, triadeMaior, triadeMaior, setimaMaior, triadeMaior, triadeMaior, triadeMenor, setima, triadeMaior, sexta, triadeMaior, setimaMenor, triadeMaior, triadeMaior, setimaMenor triadeMaior (11), setima (4), setimaMenor (4), triadeMenor (2), setimaMaior (1), sexta (1)

为了生成上面的表格,我使用了以下代码:

df.chordType = df.chordType.str.split(", ").apply(lambda x: [v for v in map(str.strip, x)])
df = df[df.chordType.str.len() > 0]


df["commonChord"] = df.chordType.apply(
    lambda x: ", ".join(
        f"{a} ({b})" for a, b in pd.Series(x).value_counts().to_dict().items()
    )
)

df.chordType = df.chordType.apply(", ".join)
df.head(5)

我的目标是获得一个表格,其中包含每个观察值的列(例如 triadMajor、triadMinor)和括号中的相应值 (3, 3)。

有可能吗?

【问题讨论】:

  • 欢迎来到Stack Overflow.。当您遇到无法解决的特定问题时,最好使用此站点,一般性问题要求指导不符合 SO 的目标。请编辑您的问题以包含完整的Minimal Reproducible Example,其中包含数据和可以复制和粘贴的代码,并清楚地说明您当前的工作出了什么问题。

标签: python pandas


【解决方案1】:

IIUC,您可以先将“chordType”列拆分为“,”(确保此拆分标准足够),然后将其分解。然后,您必须重置爆炸系列的索引。现在,您可以按展开的索引和列分组以获取每次出现的计数。如果您取消堆叠分组的数据框,您将获得所需的数据形式,可以轻松地与您的初始数据框连接。

代码:

import pandas as pd

df = pd.DataFrame({
    "chordType": ["triadeMaior, setima, triadeMenor, setimaMaior, triadeMaior, triadeMenor, triadeMenor, triadeMaior", "triadeMenor, setima, triadeMaior, setimaMenor, triadeMaior, triadeMaior, setima, setima, setimaMenor, triadeMaior, triadeMaior, setimaMaior, triadeMaior, triadeMaior, triadeMenor, setima, triadeMaior, sexta, triadeMaior, setimaMenor, triadeMaior, triadeMaior, setimaMenor"]
})

pd.concat([df, df["chordType"].str.split(", ").explode().reset_index().groupby(["index", "chordType"]).size().unstack().fillna(0)], axis=1)

输出:

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    相关资源
    最近更新 更多