如何获取熊猫数据框中的上一列值?

时间:2019-09-18 14:19:35

标签: python pandas dataframe

我是python的新手,正在尝试做一些我下面已经解释过的数据操作

这是我正在使用的CSV文件

我已经加载到一个数据帧(df_l)中,如下图所示


    Line_items              Format
0   Connectivity : Master   NaN
1   Export Type            {"hierarchyEntityLongId":101000000171,"entityF...
2   Submit?                {"dataType":"BOOLEAN"}
3   Approval Status        {"hierarchyEntityLongId":101000000073,"entityF...
4   --- AUX ---            {"minimumSignificantDigits":4,"decimalPlaces":...
5   L1 Export Level        {"hierarchyEntityLongId":101000000093,"entityF...
6   L2 Customer            {"hierarchyEntityLongId":101000000011,"entityF...
7   L2 L3 Customer         {"hierarchyEntityLongId":101000000101,"entityF...
8   Planning Customer      {"hierarchyEntityLongId":101000000021,"entityF...
9   L2 Export Code         {"textType":"GENERAL","dataType":"TEXT"}
10  Display Name           {"textType":"GENERAL","dataType":"TEXT"}
11  Short Name             {"textType":"GENERAL","dataType":"TEXT"}
12  SAP Daily Purchases    NaN
13  Quantity Carton        {"minimumSignificantDigits":4,"decimalPlaces":...
14  Custom Group 1         {"hierarchyEntityLongId":101000000014,"entityF...

我添加了一个列(IsModule),用于检查Format col = NAN还是不。如果是,则使用此代码,Ismodule = True否则为False

df_l['IsModule'] = pd.isna(df_l["Format"])
df_l


    Line_items              IsModule 
0   Connectivity : Master   True    
1   Export Type             False 
2   Submit?                 False
3   Approval Status         False
4   --- AUX ---             False
5   L1 Export Level         False
6   L2 Customer             False
7   L2 L3 Customer          False
8   Planning Customer       False
9   L2 Export Code          False
10  Display Name            False
11  Short Name              False
12  SAP Daily Purchases     True 
13  Quantity Carton         False
14  Custom Group 1          False

我添加另一列称为New,如果IsModule = True,则col中的行的值New = Line_items,否则col中的行的值new = new-1,即col new的上一行值

我在下面使用了代码

df_l.loc[df_l['IsModule']==0,'New'] = df_l.loc[1,'New']

for i in range(1,len(df_l)):
    if df_l.loc[i,'IsModule'] == 0 :
        df_l.loc[i,'Module_name']=(df_l.loc[i-1,'Module_name'])
    else :
        df_l.loc[i,'Module_name']=(df_l.loc[i,'Line_items'])

df_l[['Line_items','IsModule','Module_name']].head(15)

df_l.head(15)
    Line_items              IsModule    New
0   Connectivity : Master   True        Connectivity : Master
1   Export Type             False       Connectivity : Master
2   Submit?                 False       Connectivity : Master
3   Approval Status         False       Connectivity : Master
4   --- AUX ---             False       Connectivity : Master
5   L1 Export Level         False       Connectivity : Master
6   L2 Customer             False       Connectivity : Master
7   L2 L3 Customer          False       Connectivity : Master
8   Planning Customer       False       Connectivity : Master
9   L2 Export Code          False       Connectivity : Master
10  Display Name            False       Connectivity : Master
11  Short Name              False       Connectivity : Master
12  SAP Daily Purchases     True        SAP Daily Purchases 
13  Quantity Carton         False       SAP Daily Purchases
14  Custom Group 1          False       SAP Daily Purchases

我正在获得所需的输出,但是有更好的/替代的方法吗?对于简单的事情,似乎似乎没有多余的代码行

我只想学习并变得更好

谢谢

1 个答案:

答案 0 :(得分:2)

您想要whereffill()

df['New'] = df['Line_items'].where(df['IsModule']).ffill()

输出:

               Line_items  IsModule                    New
0   Connectivity : Master      True  Connectivity : Master
1             Export Type     False  Connectivity : Master
2                 Submit?     False  Connectivity : Master
3         Approval Status     False  Connectivity : Master
4             --- AUX ---     False  Connectivity : Master
5         L1 Export Level     False  Connectivity : Master
6             L2 Customer     False  Connectivity : Master
7          L2 L3 Customer     False  Connectivity : Master
8       Planning Customer     False  Connectivity : Master
9          L2 Export Code     False  Connectivity : Master
10           Display Name     False  Connectivity : Master
11             Short Name     False  Connectivity : Master
12    SAP Daily Purchases      True    SAP Daily Purchases
13        Quantity Carton     False    SAP Daily Purchases
14         Custom Group 1     False    SAP Daily Purchases