我有一个看起来像熊猫的“数据框”,也请告诉我您是否需要pd.Dataframe
到下表中。
iD a b c
c1 2 3 4
c1 2 3 4
c1 2 3 4
c1 2 E 4
c1 2 3 4
c2 3 4 5
c2 3 4 5
c2 3 E 5
c2 3 4 5
现在在此数据帧中有两个ID c1和c2。每当“ E”出现在“ b”列中时,我都希望删除上面的所有行。
我的最终数据框应该看起来像
iD a b c
c1 2 E 4
c1 2 3 4
c2 3 E 5
c2 3 4 5
只是想让问题简短一些,以便人们回答。请让我知道是否需要在数据框中添加一些额外的数据点
答案 0 :(得分:4)
在布尔值掩码上使用groupby
和cumsum
,以比较列“ b”与字母“ E”:
df[df.b.eq('E').groupby(df.iD).cumsum()]
iD a b c
3 c1 2 E 4
4 c1 2 3 4
7 c2 3 E 5
8 c2 3 4 5
df[df.b.eq('E').groupby(df.iD).cumsum()].reset_index(drop=True)
iD a b c
0 c1 2 E 4
1 c1 2 3 4
2 c2 3 E 5
3 c2 3 4 5
答案 1 :(得分:1)
您可以groupby
result = []
for sublst in lists:
if check_valid(sublst):
result.append(sublst)
print(result)
# [[['L', 5], ['B', 20], ['A', 10]], [['L', 5], ['L', 6]], [['A', 10], ['L', 12], ['A', 11], ['A', 15]]]
并将idxmax
与result = [sublst for sublst in lists if check_valid(sublst)]
print(result)
# [[['L', 5], ['B', 20], ['A', 10]], [['L', 5], ['L', 6]], [['A', 10], ['L', 12], ['A', 11], ['A', 15]]]
一起使用,以防止从第一个iD
开始被发现:
boolean indexing