我正在尝试合并来自提供商的频道列表,以将所有频道显示为行索引,并将值显示为提供商名称。 目前组织方式为:
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
如果您宁愿使用简单的1
或0
值是否存在,只需从交叉表中省略aggfunc
和values
参数:
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