Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 公司名称数据框架的非规范化[第2部分]_Python_Pandas_Dataframe - Fatal编程技术网

Python 公司名称数据框架的非规范化[第2部分]

Python 公司名称数据框架的非规范化[第2部分],python,pandas,dataframe,Python,Pandas,Dataframe,这是我关于公司名称数据框架非规范化的继续 我现在使用的修订表如下: import numpy as np import pandas as pd df = pd.DataFrame({'name' : ['Nitron', 'Pulset', 'Rotaxi'], 'postal_code' : [1410, 1020, 1310], 'previous_name1' : ['Rotory', np.NaN, 'D

这是我关于公司名称数据框架非规范化的继续

我现在使用的修订表如下:

import numpy as np
import pandas as pd

df = pd.DataFrame({'name' : ['Nitron', 'Pulset', 'Rotaxi'], 
                   'postal_code' : [1410, 1020, 1310], 
                   'previous_name1' : ['Rotory', np.NaN, 'Datec'],
                   'previous_name2' : [ np.NaN, 'Cmotor', np.NaN],
                   'previous_name3' : ['Datec', np.NaN, np.NaN],
                   'country' : ['BEL', 'ENG', 'JPN'], 
                   'city' : ['Brussels', np.NaN, np.NaN]
                  })

print(df)

| name   | postal_code | previous_name1 | previous_name2 | previous_name3 | country | city     |
|--------|-------------|----------------|----------------|----------------|---------|----------|
| Nitron | 1410        | Rotory         | NaN            | Datec          | BEL     | Brussels |
| Pulset | 1020        | NaN            | Cmotor         | NaN            | ENG     | NaN      |
| Rotaxi | 1310        | Cyclip         | NaN            | NaN            | JPN     | NaN      |

与我之前的文章相比,上面的数据框架现在增加了两列,即
国家
城市
系列

我的目标保持不变:为以前的公司名称不丢失的所有实例添加一个新行,包括
国家
城市
列,然后删除以前的名称系列。从视觉上看,“非规范化”版本应如下所示:

| name   | postal_code | country | city     |
|--------|-------------|---------|----------|
| Nitron | 1410        | BEL     | Brussels |
| Rotory | 1410        | BEL     | Brussels |
| Datec  | 1410        | BEL     | Brussels |
| Pulset | 1020        | ENG     | NaN      |
| Cmotor | 1020        | ENG     | NaN      |
| Rotaxi | 1310        | JPN     | NaN      |
| Cyclip | 1310        | JPN     | NaN      |

在花了一些时间理解了jezrael为我的上一个问题提供的解决方案后,我试图修改/调整这个新问题的解决方案,但没有成功。由于我是Python/Pandas生态系统的新手,任何额外的帮助都将不胜感激。

您可以在
set\u index
中添加多列,并将
level=1
更改为
level=3
,以删除第四级
多索引

df1 = (df.set_index(['postal_code','country','city'])
         .stack()
         .reset_index(level=3, drop=True)
         .reset_index(name='name')
         )
print (df1)
   postal_code country      city    name
0         1410     BEL  Brussels  Nitron
1         1410     BEL  Brussels  Rotory
2         1410     BEL  Brussels   Datec
3         1020     ENG       NaN  Pulset
4         1020     ENG       NaN  Cmotor
5         1310     JPN       NaN  Rotaxi
6         1310     JPN       NaN   Datec
对于第二种溶液,在熔体中添加多列:

df1 = (df.melt(['postal_code','country','city'], value_name='name')
         .drop('variable', axis=1)
         .dropna(subset=['name'])
         .reset_index( drop=True)
)
print (df1)
   postal_code country      city    name
0         1410     BEL  Brussels  Nitron
1         1020     ENG       NaN  Pulset
2         1310     JPN       NaN  Rotaxi
3         1410     BEL  Brussels  Rotory
4         1310     JPN       NaN   Datec
5         1020     ENG       NaN  Cmotor
6         1410     BEL  Brussels   Datec