groupby,然后根据另一列设置列值(索引器太多)

时间:2017-09-15 13:22:07

标签: python pandas dataframe

我有以下数据框:

    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行

2 个答案:

答案 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