重新组织列和行的数据帧

2024-10-03 02:34:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

         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()”的东西。是的,我知道那不行


Tags: 列表youtube提供者tv频道bbcabcanimal
1条回答
网友
1楼 · 发布于 2024-10-03 02:34:13

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

相关问题 更多 >