在熊猫中,如何创建带有某些内容的数据框?

时间:2019-01-03 21:43:33

标签: python pandas

在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'}}

我需要根据数据框bancadas创建一个带有“源”和“目标”列的新数据框

“源”列的名称将包含在“ Parlamentar”中。并且“目标”列将具有其他列的内容,但没有值“ 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
...

因此名称可以在“源”列中重复-次数将是在其他列中不包含“ nan”的行数

“目标”列将具有与每个名称相对应的其他列的每个内容。减去内容“ nan”

请,有可能在大熊猫里做吗?用什么方式?

1 个答案:

答案 0 :(得分:1)

尝试:

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