熊猫数据帧重新组织列和行



我正在尝试合并来自提供商的频道列表,以将所有频道显示为行索引,并将值显示为提供商名称。 目前组织方式为:

         DIRECTV           FUBO     YOUTUBE TV
0            A&E            A&E            ABC
1            ABC     ADULT SWIM            AMC
2    ACCUWEATHER            AMC  ANIMAL PLANET
3            AMC  ANIMAL PLANET            BBC
4  ANIMAL PLANET            BBC      BBC WORLD

我希望结果是(标题行可以是任何内容(:

A&E            DIRECTV  FUBO
ABC            DIRECTV        YOUTUBE TV
ACCUWEATHER    DIRECTV
ADULT SWIM              FUBO
AMC            DIRECTV  FUBO  YOUTUBE TV
ANIMAL PLANET  DIRECTV  FUBO  YOUTUBE TV
BBC                     FUBO  YOUTUBE TV
BBC WORLD                     YOUTUBE TV

我相信这应该通过加入、合并或其他非常简单地完成,但我无法让它工作。 任何帮助将不胜感激。

注意:上面的图片显然只是列表的一小部分,索引列应该是来自所有提供商的每个唯一频道。 类似于"df.values.unique(("的东西。 是的,我知道这行不通。

IIUC,这是一个melt + crosstab问题


u = df.melt(
    var_name='provider',
    value_name='channel'
)
pd.crosstab(
  index=u['channel'],
  columns=u['provider'],
  values=u['provider'],
  aggfunc='first'
)

provider       DIRECTV  FUBO  YOUTUBE TV
channel
A&E            DIRECTV  FUBO         NaN
ABC            DIRECTV   NaN  YOUTUBE TV
ACCUWEATHER    DIRECTV   NaN         NaN
ADULT SWIM         NaN  FUBO         NaN
AMC            DIRECTV  FUBO  YOUTUBE TV
ANIMAL PLANET  DIRECTV  FUBO  YOUTUBE TV
BBC                NaN  FUBO  YOUTUBE TV
BBC WORLD          NaN   NaN  YOUTUBE TV

如果您宁愿使用简单的10值是否存在,只需从交叉表中省略aggfuncvalues参数:

pd.crosstab(u['channel'], u['provider'])

provider       DIRECTV  FUBO  YOUTUBE TV
channel
A&E                  1     1           0
ABC                  1     0           1
ACCUWEATHER          1     0           0
ADULT SWIM           0     1           0
AMC                  1     1           1
ANIMAL PLANET        1     1           1
BBC                  0     1           1
BBC WORLD            0     0           1

相关内容

最新更新