Python 如果满足条件,则添加空行
我有一个数据框,看起来像这样。有没有办法在每次描述为空时在上面添加空行?这就是它看起来的样子:Python 如果满足条件,则添加空行,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,看起来像这样。有没有办法在每次描述为空时在上面添加空行?这就是它看起来的样子: Type Date Src Description ST or OT 2 A 2019-06-10 AP 3 A 2019-06-10 AP Boston-Alliant Insurance Services ST 5 B
Type Date Src Description ST or OT
2 A 2019-06-10 AP
3 A 2019-06-10 AP Boston-Alliant Insurance Services ST
5 B 2019-05-16 AP
6 B 2019-05-16 AP City of Cambridge ST
7 B 2019-05-16 AP City of Cambridge OT
8 B 2019-08-20 AP Jeffrey Soderquist OT
905 C 2019-05-01 PR
906 C 2019-05-01 AP Citibusiness Card ST
907 C 2019-07-26 AP Pro Tool and Supply Inc OT
908 D 2019-09-25 PR
909 D 2019-09-25 PR 21/O'Leary ST
910 D 2019-09-26 PR 21/O'Leary ST
这就是我最后想要的:
Type Date Src Description ST or OT
2 A 2019-06-10 AP
3 A 2019-06-10 AP Boston-Alliant Insurance Services ST
5
6
7 B 2019-05-16 AP
8 B 2019-05-16 AP City of Cambridge ST
9 B 2019-05-16 AP City of Cambridge OT
10 B 2019-08-20 AP Jeffrey Soderquist OT
905
906
907 C 2019-05-01 PR
908 C 2019-05-01 AP Citibusiness Card ST
909 C 2019-07-26 AP Pro Tool and Supply Inc OT
910
911
912 D 2019-09-25 PR
913 D 2019-09-25 PR 21/O'Leary ST
914 D 2019-09-26 PR 21/O'Leary ST
您可以使用:
对于索引,df.iterrrows()中的行:
如果df.loc[索引,'Type']!=df.loc[index+1,'Type']和not(pd.isna(df.iloc[index,'Type'])和not(pd.isna(df.iloc[index+1,'Type']))
df.loc[index+1]=pd.系列([np.nan,np.nan,np.nan,np.nan])
df.loc[index+2]=pd.系列([np.nan,np.nan,np.nan,np.nan])
您的预期结果与您的描述不匹配。第一行为空,但上面没有添加空行
这里有一个方法:
blanks = df[df['Description'].str.strip() == ''] \
.assign(**{
'Type': '',
'Date': pd.NaT,
'Src': '',
'ST or OT': ''
})
blanks.index -= 1
df = pd.concat([df, blanks]).sort_index()
结果:
Type Date Src Description ST or OT
1 NaT
2 A 2019-06-10 AP NaN
3 A 2019-06-10 AP Boston-Alliant Insurance Services ST
4 NaT
5 B 2019-05-16 AP NaN
6 B 2019-05-16 AP City of Cambridge ST
7 B 2019-05-16 AP City of Cambridge OT
8 B 2019-08-20 AP Jeffrey Soderquist OT
904 NaT
905 C 2019-05-01 PR NaN
906 C 2019-05-01 AP Citibusiness Card ST
907 C 2019-07-26 AP Pro Tool and Supply Inc OT
907 NaT
908 D 2019-09-25 PR NaN
909 D 2019-09-25 PR 21/O'Leary ST
910 D 2019-09-26 PR 21/O'Leary ST
您可以利用它通过索引位置添加值,这在处理列表时非常灵活
indices = df.loc[df['Description'] == ' '].index.tolist() # get your blank rows.
rows_ = dict.fromkeys(df.columns.tolist(),'') # create an empty df based on your cols.
然后,我们只需在您选择的索引位置将行变量中的值指定为值,将键指定为列
df_new = pd.DataFrame(np.insert(df.values, [x -1 for x in indices],
values=list(rows_.values()),
axis=0),columns=rows_.keys())
print(df_new)
Type Date Src Description ST or OT
0 A 10/06/2019 AP ST
1
2 A 10/06/2019 AP Boston-Alliant Insurance Services
3 B 16/05/2019 AP ST
4 B 16/05/2019 AP City of Cambridge OT
5 B 16/05/2019 AP City of Cambridge
6
7 B 20/08/2019 AP Jeffrey Soderquist OT
8 C 01/05/2019 PR
9 C 01/05/2019 AP Citibusiness Card ST
10
11 C 26/07/2019 AP Pro Tool and Supply Inc OT
12 D 25/09/2019 PR
13 D 25/09/2019 PR 21/O'Leary ST
14
15 D 26/09/2019 PR 21/O'Leary ST
我想你是指df.iterrows()中索引行的
:
。