【发布时间】:2018-12-20 20:57:06
【问题描述】:
我想在下一个满足特定条件时从我的数据框中删除行。假设我的数据集是:
raw_data = {'SessionID': ['S1', 'S1', 'S1', 'S2', 'S2', 'S2', 'S2', 'S2', 'S3', 'S3', 'S3', 'S3', 'S3', 'S3'],
'Event Action': ['Action', 'Action', 'Filter', 'Action', 'Action', 'Action', 'Filter', 'Filter', 'Action', 'Filter','Action', 'Filter', 'Filter', 'Action'],
'Timestamp': ['T1.1', 'T1.2', 'T1.3', 'T1.1', 'T1.2', 'T1.3', 'T1.3', 'T1.4', 'T1.4', 'T1.5', 'T1.7', 'T1.7', 'T1.8', 'T1.9']}
df = pd.DataFrame(raw_data, columns = ['SessionID', 'Event Action', 'Timestamp'])
df
SessionID Event Action Timestamp
0 S1 Action T1.1
1 S1 Action T1.2
2 S1 Filter T1.3
3 S2 Action T1.1
4 S2 Action T1.2
5 S2 Action T1.3
6 S2 Filter T1.3
7 S2 Filter T1.4
8 S3 Action T1.4
9 S3 Filter T1.5
10 S3 Action T1.7
11 S3 Filter T1.7
12 S3 Filter T1.8
13 S3 Action T1.9
给定任何 row 并且是 row1 下一个,我想在以下情况下删除 row:
if df[row:'SessionID'] == df[row1:'SessionID']
and df[row:'Event Action'] == 'Action'
and df[row1:'Event Action'] == 'Filter'
and df[row:'Timestamp'] == df[row1:'Timestamp']
例如,在上面的数据集中,应该消除的行是 5 和 10。我不是 Python 方面的专家,但我尝试过:
def cleanfilter(row):
row1 = row + 1
if df[row:'SessionID'] == df[row1:'SessionID'] and df[row:'Event Action'] == 'Search Action'and df[row1:'Event Action'] == 'Search Filter' and df[row:'Timestamp'] == df[row1:'Timestamp']:
df.drop(df.index[row])
df.apply(cleanfilter,axis=1)
但我不断收到:“TypeError:('必须是 str,而不是 int','发生在索引 0')”。我不知道该谷歌了...任何建议将不胜感激!提前致谢。
【问题讨论】:
-
你是什么意思
row1:'SessionID',我没有看到第 1 行 -
对于糟糕的表述,我深表歉意。 row1 是紧接在 row 之后的行。因此,对于任何特定的 row,row1 是紧随 row 之后的那个