根据相邻列熊猫数据框中的值从一列中选择值

时间:2019-12-25 21:05:25

标签: python pandas dataframe

我在根据熊猫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

1 个答案:

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

groupby.first

grouped.sort_values(['userid','transferdate']).groupby('userid',as_index=False).first()