我有一個數據框,df,有兩列:ID和日期。它記錄不同日期的ID的事件。這兩個字段都不是唯一的,但行通過組合是唯一的(沒有ID在同一日期有多個記錄)。熊貓數據框,應用函數,返回索引
我有以下功能在任何將來的日期添加新列來確定,在給定的記錄/日期,是否(TRUE/FALSE)的ID有另一個記錄:
def f(df):
count = pd.Series(np.arange(1, len(df)+1), index=df["date"])
day = count.index.shift(0, freq="D")
next18month = count.index.shift(3000, freq="D")
result = count.asof(next18month).fillna(0).values - count.asof(day).fillna(0).values
if result[0] > 0:
return pd.Series(1, df.index)
else:
return pd.Series(0, df.index)
然後我可以將函數應用於我的數據框,按ID分組:
df["everagain"] = df.groupby("id").apply(f)
它不起作用。我相信result[0]
是錯誤的。它第一次出現一個ID(它第二次計數,觸發一個真正的返回值),但如果給定的id有第二條記錄,並且沒有第三條記錄,它仍然返回'1'(真)第二個記錄。有人可以幫助使用正確的符號嗎?
(注意:3000天足以算作我的數據集的永久數)。
例如,如果DF看起來像:
| ID | Date
0 | A | 2010-01-01
1 | A | 2010-02-01
2 | A | 2010-02-15
3 | B | 2010-01-01
4 | C | 2010-02-01
5 | C | 2010-02-15
然後輸出將有希望的樣子:
| ID | Date | everagain
0 | A | 2010-01-01 | 1
1 | A | 2010-02-01 | 1
2 | A | 2010-02-15 | 0
3 | B | 2010-01-01 | 0
4 | C | 2010-02-01 | 1
5 | C | 2010-02-15 | 0
你能張貼你的框架樣本和預期的輸出嗎? – Jeff