Pandas 根据每行出现的次数将行转换为列
Pandas pivot rows into columns with count of occurence per row
我有以下数据框,其中一列代表 ID(一个相同的 ID 可以在该列中多次出现),另一列代表该 ID 的某个类别的出现。每个类别每个 ID 可以出现多次。
id category
1234 happy
4567 sad
8910 medium
...............
1234 happy
4567 medium
我想旋转这个 table 以获得以下内容
id happy sad medium
1234 2 0 0
4567 0 1 1
8910 0 0 1
我尝试了以下方法
df.pivot_table(index= "id", columns = "category", aggfunc= 'count', fill_value = 0)
但它只返回 ID 作为索引。
有人能帮忙吗?
您可以使用 pd.crosstab
:
print (pd.crosstab(df["id"], df["category"]))
如果您想坚持使用 pivot_table
,您需要添加一个额外的列作为值:
print (df.assign(value=0).pivot_table(index="id", columns="category", values="value", aggfunc='count', fill_value=0))
category happy medium sad
id
1234 2 0 0
4567 0 1 1
8910 0 1 0
我有以下数据框,其中一列代表 ID(一个相同的 ID 可以在该列中多次出现),另一列代表该 ID 的某个类别的出现。每个类别每个 ID 可以出现多次。
id category
1234 happy
4567 sad
8910 medium
...............
1234 happy
4567 medium
我想旋转这个 table 以获得以下内容
id happy sad medium
1234 2 0 0
4567 0 1 1
8910 0 0 1
我尝试了以下方法
df.pivot_table(index= "id", columns = "category", aggfunc= 'count', fill_value = 0)
但它只返回 ID 作为索引。
有人能帮忙吗?
您可以使用 pd.crosstab
:
print (pd.crosstab(df["id"], df["category"]))
如果您想坚持使用 pivot_table
,您需要添加一个额外的列作为值:
print (df.assign(value=0).pivot_table(index="id", columns="category", values="value", aggfunc='count', fill_value=0))
category happy medium sad
id
1234 2 0 0
4567 0 1 1
8910 0 1 0