我有以下数据框:
updated_at type source
0 2017-01-01 User
1 2017-01-01 Inbound
2 2017-01-02 User
3 2017-01-02 Outbound
4 2017-01-03 Outbound
5 2017-01-03 User
我需要删除type != User
所在的行,但是将type == User
行的源设置为我要删除的行的type
。到目前为止,我已经尝试过groupby('updated_at)
,但是我遇到了在副本上设置值的错误。此外,groupby('updated_at')
始终只返回两行。
这就是我想要的结果:
updated_at type source
0 2017-01-01 User Inbound
2 2017-01-02 User Outbound
5 2017-01-03 User Outbound
注意:我有~370,000行
答案 0 :(得分:0)
如果您确定要定位的行是连续的,则可以使用shift
:
df["source"]=df["type"].shift(-1)
然后过滤掉type=="User"
修改强>
由于线条不连续,与样本不同,
df=df.sort_values(["updated_at", "type"])
这将保证一个TimeStamp类型总是(1)入站/出站(2)用户。 然后:
df["source"]=df["type"].shift()
然后过滤掉type=="User"
答案 1 :(得分:0)
拆分数据框并使用相同的索引标准化它们。 然后从源
宣布源列user = df.loc[df.type == 'User',:]
user.set_index('updated_at')
bound = df.loc[df.type != 'User',:]
bound.set_index('updated_at')
user['source'] = bound.type