通过另一列获取每个唯一值的计数并将它们转换为列

Get count of each unique values groupby another column and transform them into columns

我有如下数据框:

id name colA colB
One Ana abc xyz
One Ana abc xyz
One Ana bde xyz
One Ana bde xyz
One Ana bde yhn
One Ana bde yhn
One Ana bde qwe
One Ana teh qwe
Two Bob abc qwe
Two Bob teh qwe
Two Bob pop omg

我需要将我的数据框转换为

id name abc bde teh pop xyz yhn qwe omg
One Ana 2 5 1 0 4 2 2 0
Two Bob 1 0 1 1 0 0 2 1

我写了下面的代码来实现这个,但它没有给我预期的输出,而且我也不知道如何为多列执行它。请帮忙。

df = df.groupby(['id','colA']).size().reset_index(name='colA_counts')

你可以试试这个:

a = df[["id", "name", "A"]].copy()
b = df[["id", "name", "B"]].copy()
b.columns = ["id", "name", "A"]

       
result = pd.concat([a, b]).value_counts().reset_index()
result.columns = ["id", "name", "A", "count"]
pd.pivot_table(result, index=["id", "name"], columns=["A"], values="count").fillna(0)

我基本上做的是,我首先创建一个新的 DataFrame,将原来的 DataFrame 连接起来,其中 A 和 B 都被称为“A”,因为你不会区分它是否是 A或 B. 在此我让它计算不同的值,即 id、name 和 value 的组合。

然后我旋转 table 以便将“A”中的值视为列,最后我通过调用 [=11 用零填充所有未出现在数据中的组合=].

顺便说一句,我不明白的是,您示例中“one ana pop”中的 1 是从哪里来的。你的数据没有提供这个。