gpt4 book ai didi

python - Pandas 行值到列标题

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:54 24 4
gpt4 key购买 nike

我有一个像这样的daraframe

df = pd.DataFrame({'id1':[1,1,1,1,2,2,2],'id2':[1,1,1,1,2,2,2],'value':['a','b','c','d','a','b','c']})

id1 id2 value
0 1 1 a
1 1 1 b
2 1 1 c
3 1 1 d
4 2 2 a
5 2 2 b
6 2 2 c

我需要转换成这种形式

   id1  id2  a  b  c  d
0 1 1 1 1 1 1
1 2 2 1 1 1 0

每个 id 的值变量中可以有任意数量的级别,范围从 1 到 10。如果该 id 不存在级别,则应为 0,否则为 1。

我正在使用 anaconda python 3.5,windows 10

最佳答案

如果仅在存在时需要输出10:

您可以使用 get_dummiesset_index 创建的 Series , 但这是必要的 groupby + GroupBy.max :

df = pd.get_dummies(df.set_index(['id1','id2'])['value'])
.groupby(level=[0,1])
.max()
.reset_index()
print (df)
id1 id2 a b c d
0 1 1 1 1 1 1
1 2 2 1 1 1 0

另一种解决方案 groupby , sizeunstack , 但与 gt 比较是必要的并通过 astype 转换为 int .最后 reset_indexrename_axis :

df = df.groupby(['id1','id2', 'value'])
.size()
.unstack(fill_value=0)
.gt(0)
.astype(int)
.reset_index()
.rename_axis(None, axis=1)
print (df)
id1 id2 a b c d
0 1 1 1 1 1 1
1 2 2 1 1 1 0

如果需要计算:

df = pd.DataFrame({'id1':[1,1,1,1,2,2,2],
'id2':[1,1,1,1,2,2,2],
'value':['a','b','a','d','a','b','c']})

print (df)
id1 id2 value
0 1 1 a
1 1 1 b
2 1 1 a
3 1 1 d
4 2 2 a
5 2 2 b
6 2 2 c

df = df.groupby(['id1','id2', 'value'])
.size()
.unstack(fill_value=0)
.reset_index()
.rename_axis(None, axis=1)
print (df)
id1 id2 a b c d
0 1 1 2 1 0 1
1 2 2 1 1 1 0

或者:

df = df.pivot_table(index=['id1','id2'], columns='value', aggfunc='size', fill_value=0)
.reset_index()
.rename_axis(None, axis=1)
print (df)
id1 id2 a b c d
0 1 1 2 1 0 1
1 2 2 1 1 1 0

关于python - Pandas 行值到列标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44732930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com