gpt4 book ai didi

python - Pandas Dataframe 重组列和行

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

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

         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

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

注意:上面的图片显然只是列表的一小部分,索引列应该是所有提供商的每个唯一 channel 。类似于“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

关于python - Pandas Dataframe 重组列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57189260/

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