在Pandas中,如何创建具有特定内容的幻影的数据帧?

2024-05-15 04:12:17 发布

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

在python3和pandas中,我有一个数据帧:

bancadas.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 514 entries, 0 to 513
Data columns (total 12 columns):
Parlamentar                  514 non-null object
Evangélica                   196 non-null object
Ruralista                    207 non-null object
Bala                         35 non-null object
Sindical                     43 non-null object
Direitos Humanos             24 non-null object
Mineração                    23 non-null object
Empresarial                  208 non-null object
Parentes                     238 non-null object
Saúde                        21 non-null object
Bola                         14 non-null object
Empreiteiras/construtoras    226 non-null object
dtypes: object(12)
memory usage: 24.1+ KB

“Parlamentar”栏有人的名字。其余的列可以有“nan”行或列名值本身。示例:

bancadas[['Parlamentar','Evangélica', 'Ruralista', 'Bala']].head(5).to_dict() 
{'Parlamentar': {0: 'Alberto Fraga',
  1: 'Alexandre Leite',
  2: 'Carlos Melles',
  3: 'Cláudio Cajado',
  4: 'Efraim Filho'},
 'Evangélica': {0: 'Evangélica', 1: nan, 2: 'Evangélica', 3: nan, 4: nan},
 'Ruralista': {0: 'Ruralista',
  1: 'Ruralista',
  2: 'Ruralista',
  3: 'Ruralista',
  4: 'Ruralista'},
 'Bala': {0: 'Bala', 1: nan, 2: nan, 3: nan, 4: 'Bala'}}

我需要基于dataframebancadas创建一个包含“source”和“target”列的新dataframe

“source”列的名称将包含在“Parlamentar”中。“target”列将包含其他列的内容,但不包含值“nan”

它看起来是这样的:

source              target
Alberto Fraga       Evangélica
Alberto Fraga       Ruralista
Alberto Fraga       Bala
Alexandre Leite     Ruralista
Alexandre Leite     Empresarial
Alexandre Leite     Parentes
Alexandre Leite     Empreiteiras
Carlos Melles       Evangélica
Carlos Melles       Ruralista
Carlos Melles       Empresarial
Carlos Melles       Parentes
Carlos Melles       Empreiteiras/construtoras
...

因此名称可以在“source”列中重复—重复次数将是其他列中没有“nan”的行数

“target”列将包含与每个名称对应的其他列的每个内容。少了“南”的内容

请问,在熊猫身上可以这样做吗?以什么方式


Tags: objectnannullnoncarlosalexandrealbertobala
1条回答
网友
1楼 · 发布于 2024-05-15 04:12:17

尝试:

df.set_index('Parlamentar')\
  .stack()\
  .reset_index(level=1, drop=True)\
  .rename('source').rename_axis('target')
  .reset_index()

输出:

            target      source
0    Alberto Fraga  Evangélica
1    Alberto Fraga   Ruralista
2    Alberto Fraga        Bala
3  Alexandre Leite   Ruralista
4    Carlos Melles  Evangélica
5    Carlos Melles   Ruralista
6   Cláudio Cajado   Ruralista
7     Efraim Filho   Ruralista
8     Efraim Filho        Bala

相关问题 更多 >

    热门问题