我是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
我正在获得所需的输出,但是有更好的/替代的方法吗?对于简单的事情,似乎似乎没有多余的代码行
我只想学习并变得更好
谢谢
答案 0 :(得分:2)
您想要where
和ffill()
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