我在根据熊猫df的另一列中的值选择列时遇到麻烦。 模拟数据:
n = 10000
userid = list(map(lambda x: int(x), np.random.sample(n)*100000))
useramount = list(map(lambda x: round(x,2), np.random.sample(n)*100))
transferdate = pd.to_datetime(np.random.choice(pd.date_range(start = '03/13/1994', periods = n), n).tolist())
transfers = pd.DataFrame({'userid':userid,
'useramount':useramount,
'transferdate':transferdate})
v = transfers.userid.value_counts()
transfers = transfers[transfers.userid.isin(v.index[v>1])]
grouped = transfers.groupby(['userid','useramount'],as_index=False).agg({'transferdate':'min'})
分组后的样子:
userid useramount transferdate
0 350 13.01 2013-09-30
1 350 46.98 2003-02-28
2 431 25.88 1998-01-31
3 431 97.76 1999-08-15
我想对每个日期和日期中的较早日期的每个userid和useramount进行子集化,因此理想情况下,我的结果应如下所示:
userid useramount transferdate
1 350 46.98 2003-02-28
2 431 25.88 1998-01-31
答案 0 :(得分:0)
使用DataFrame.sort_values
+ DataFrame.drop_duplicates
:
#grouped['transferdate']=pd.to_datetime(grouped['transferdate']) if necessary
grouped.sort_values(['userid','transferdate']).drop_duplicates('userid')
# userid useramount transferdate
#1 350 46.98 2003-02-28
#2 431 25.88 1998-01-31
grouped.sort_values(['userid','transferdate']).groupby('userid',as_index=False).first()