跨行大熊猫蟒蛇标志交易(pandas python flag transactions across

2019-09-26 12:45发布

我有如下数据。 我想旗交易 -

当同一个员工都有(一个'Car Rental', 'Car Rental - Gas'在列expense type )和'Car Mileage'在同一天-所以在这种情况下,员工ac的交易将被高亮。 员工b的交易将不被突出,因为他们不符合条件-他没有一个'Car Mileage'

我想列zflag 。 在该列中不同数量的指示实例的基团当上述条件满足

d = {'emp': ['a',   'a',    'a',    'a',    'b',    'b',    'b',    'c',    'c',    'c',    'c' ], 
 'date': ['1',  '1',    '1',    '1',    '2',    '2',    '2',    '3',    '3',    '3',    '3' ], 
 'usd':[1,  2,  3,  4,  5,  6,  7,  8,  9,  10,     11 ], 
 'expense type':['Car Mileage',     'Car Rental',   'Car Rental - Gas',     'food',     'Car Rental',   'Car Rental - Gas',     'food',     'Car Mileage',  'Car Rental',   'food',     'wine' ],
 'zflag':['1',  '1', '1',   ' ',' ',' ',' ','2','2',' ',' ' ]
 }

df = pd.DataFrame(data=d)



    df
Out[253]: 
   date emp      expense type  usd zflag
0     1   a       Car Mileage    1     1
1     1   a        Car Rental    2     1
2     1   a  Car Rental - Gas    3     1
3     1   a              food    4      
4     2   b        Car Rental    5      
5     2   b  Car Rental - Gas    6      
6     2   b              food    7      
7     3   c       Car Mileage    8     2
8     3   c        Car Rental    9     2
9     3   c              food   10      
10    3   c              wine   11      

如果我能得到关于函数使用指针我将不胜感激。 我想用GROUPBY的......但不知道

据我所知, date + emp将是我的主键

Answer 1:

这是一种方法。 这不是最干净的,但你要描述的是非常具体的。 一些这可能是能够与功能进行简化。

temp_df = df.groupby(["emp", "date"], axis=0)["expense type"].apply(lambda x: 1 if "Car Mileage" in x.values and any([k in x.values for k in ["Car Rental", "Car Rental - Gas"]]) else 0).rename("zzflag")
temp_df = temp_df.loc[temp_df!=0,:].cumsum()
final_df = pd.merge(df, temp_df.reset_index(), how="left").fillna(0)

脚步:

  • GROUPBY EMP若不/日期,如果满足搜索条件,1,0

  • 删除与0和cumsum产生唯一值的行

  • 加入回到原来的框架

编辑:

下面回答你的问题。 在加入作品,因为在运行.reset_index()这需要从索引中“EMP”和“日期”,并将其移至列。



文章来源: pandas python flag transactions across rows