【发布时间】:2020-04-16 09:57:08
【问题描述】:
我有这个带有“代码”列的熊猫数据框,其中包含顺序分层代码。我的目标是使用每个层次级别代码及其名称创建新列,如下所示:
原始数据:
Code Name
0 A USA
1 AM Massachusetts
2 AMB Boston
3 AMS Springfield
4 D Germany
5 DB Brandenburg
6 DBB Berlin
7 DBD Dresden
我的目标:
Code Name Level1 Level1Name Level2 Level2Name Level3 Level3Name
0 A USA A USA AM Massachusetts AMB Boston
1 AM Massachusetts A USA AM Massachusetts AMB Boston
2 AMB Boston A USA AM Massachusetts AMB Boston
3 AMS Springfield A USA AM Massachusetts AMS Springfiled
4 D Germany D Germany DB Brandenburg DBB Berlin
5 DB Brandenburg D Germany DB Brandenburg DBB Berlin
6 DBB Berlin D Germany DB Brandenburg DBB Berlin
7 DBD Dresden D Germany DB Brandenburg DBD Dresden
我的代码:
import pandas as pd
df = pd.read_excel(r'/Users/BoBoMann/Desktop/Sequence.xlsx')
df['Length']=test.Code.str.len() ## create a column with length of each cell in Code
df['Level1']=test.Code.str[:1] ## create the first level using string indexing
df['Level1Name'] = df[df['Length']==1]['Name']
df.head() ## This yields:
Code Name Length Level1 Level1Name
0 A USA 1 A USA
1 AM Massachusetts 2 A NaN
2 AMB Boston 3 A NaN
3 AMS Springfield 3 A NaN
4 D Germany 1 D Germany
5 DB Brandenburg 2 D NaN
6 DBB Berlin 3 D NaN
7 DBD Dresden 3 D NaN
对于我目前的方法,如何在 Level1Name 列中将这些 NaN 分别转换为 USA 和 Germany?
一般来说,有没有更好的方法来实现我为每个分层层创建列并将它们与另一列中各自的名称相匹配的目标?
【问题讨论】:
-
要回答您关于将这些 NaN 转换为美国和德国的问题,您可以使用
ffill像这样df['Level1Name'].ffill()。但是,我在下面提供了一种不同的方法。 -
我很困惑为什么所有
Springfield和Dresden都没有4级,你能解释一下为什么 -
@anky_91:Springfield 和 Dresden 没有第 4 级,因为它们的代码长度仍然是 3。这是根据会计结构建模的,其中每个附加字母代表一个层次结构。与德累斯顿和斯普林菲尔德的情况一样,同一层可能有不同的分支——希望能回答你的问题
标签: pandas dataframe python-3.6 hierarchical