在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”
请,有可能在大熊猫里做吗?用什么方式?
答案 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