通过另一列获取每个唯一值的计数并将它们转换为列
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 是从哪里来的。你的数据没有提供这个。
我有如下数据框:
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 是从哪里来的。你的数据没有提供这个。