如何获取数据帧中的前一列值?

2024-10-01 19:29:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的新手,正在尝试进行一些数据操作,我将在下面进行解释

这是我正在使用的CSV文件

我已经加载到一个数据帧(dfu 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中的行的值,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

我得到了期望的输出,但有没有更好的/替代的方法?似乎只有几行额外的代码

我只想学习,变得更好

谢谢


Tags: namemasterfalsedfnewlineexportcustomer
1条回答
网友
1楼 · 发布于 2024-10-01 19:29:49

你想要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

相关问题 更多 >

    热门问题