我有一个数据框“ moment_f”。 我必须从moment_f中删除一些包含名称“ AH”的行。 但是,我不会删除每个“ AH”行,因此我创建了一个新的数据框 包含我要删除的“ AH”。
ah1 = moment_f[moment_f["TextGridLabel"] == "AH"]
ah_d = ah1.iloc[::2]
# got the odd rows of "AH" which is what I need to get rid of from the original dataframe "moment_f".
所以现在我要从数据帧“ moment_f”中删除数据帧“ ah_d”。
串联的反面是什么? 我已经尝试过拖放,拆分等操作,但是它不起作用。
答案 0 :(得分:0)
IIUC需要
df = moment_f[~moment_f.index.isin(ah_d.index)]
答案 1 :(得分:0)
您可以通过仅对索引使用 来避免创建“子集数据框”。使用iloc
可以做到,但并非微不足道。重要的是,以下解决方案仅适用于整数位置,而不适用于索引标签,即它不采用唯一索引。
import numpy as np
# some example dataframe
df = pd.DataFrame({'A': [1, 2, 3, 1, 1, 2, 1, 1, 1, 3]})
# extract indices to remove
idx = np.where(df['A'] == 1)[0][::2] # array([0, 4, 7], dtype=int64)
# include all indices which do not match idx
res = df.iloc[~np.in1d(np.arange(df['A'].shape[0]), idx)]
print(res)
A
1 2
2 3
3 1
5 2
6 1
8 1
9 3
如果您的索引是常规pd.RangeIndex
,即0, 1, ..., n
,则可以通过pd.DataFrame.drop
按标签进行放置:
res = df.drop(idx, axis='rows')