python - Pandas 行值到列标题

标签 python python-3.x pandas dataframe

我有一个像这样的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/

相关文章:

python-3.x - 使用 Keras 和 TensorFlow 后端可重现结果

python - Pandas:在列之间交换行

python - Django 应用程序可以使用其 linux 用户向 MySQL 进行身份验证吗?

python - 使用索引对数组进行排序会导致数组索引过多

python - 如何将表情符号替换为文本中的单词?

python-3.x - 局部变量如何在 python 3 的嵌套函数中工作?

python - pandas 条形图结合线图显示了从 1970 年开始的时间轴

python 已弃用 pd.convert_objects(convert_numeric=True) 有效,替代方案出现故障

python - 直接pip安装和requirements.txt有什么区别?

python - StyleGAN图像生成不起作用,TensorFlow看不到GPU