我是python的新手,正在努力寻找一些东西。我正在对熊猫发票数据库进行一些数据分析,其中列有金额,贷项,日期以及每个购买的包裹的唯一公司ID的列。
我想通过一个函数来运行每个唯一的公司ID,该函数将根据包裹购买日期的差额计算这些信用的平均花费率。我已经在函数中找到了基础知识,它返回了一个索引到原始数据帧的序列,其中包含每个软件包之间每天花费的平均信用额的值。但是,我一次只能使它与一个公司ID一起使用,而且我不知道我可以采取哪种方法将每个公司ID的所有这些不同系列组合在一起,以便能够在我的数据框中正确添加新列每个套件的平均信用支出价值。到目前为止,这是我的代码:
def creditspend(mylist = []):
for i in mylist:
a = df.loc[df['CompanyId'] == i]
a = a.sort_values(by=['Date'], ascending=False)
days = a.Date.diff().map(lambda x: abs(x.days))
spend = a['Credits']/days
print(spend)
如果我打电话
creditspend(mylist=[8, 15])
(具有多个输入)显然不起作用。我需要做什么才能完成此功能?
谢谢。
答案 0 :(得分:0)
apply()在熊猫中是一种非常有用的方法,可将函数应用于DataFrame的每一行或每一列。
因此,如果您的DataFrame为df
:
def creditspend(row):
# some calculation code here
return spend
df['spend_rate'] = df.apply(creditspend)
(您还可以在带有axis = 1关键字的列上使用apply()。)
答案 1 :(得分:0)
为{em> CompanyID 聚合考虑一个groupby
。下面以随机数据进行演示:
import numpy as np
import pandas as pd
np.random.seed(7182018)
df = pd.DataFrame({'CompanyID': np.random.choice(['julia', 'pandas', 'r', 'sas', 'stata', 'spss'],50),
'Date': np.random.choice(pd.Series(pd.date_range('2018-01-01', freq='D', periods=180)), 50),
'Credits': np.random.uniform(0,1000,50)
}, columns=['Date', 'CompanyID', 'Credits'])
# SORT ONCE OUTSIDE OF PROCESSING
df = df.sort_values(by=['CompanyID', 'Date'], ascending=[True, False]).reset_index(drop=True)
def creditspend(g):
g['days'] = g.Date.diff().map(lambda x: abs(x.days))
g['spend'] = g['Credits']/g['days']
return g
grp_df = df.groupby('CompanyID').apply(creditspend)
输出
print(grp_df.head(20))
# Date CompanyID Credits days spend
# 0 2018-06-20 julia 280.522287 NaN NaN
# 1 2018-06-12 julia 985.009523 8.0 123.126190
# 2 2018-05-17 julia 892.308179 26.0 34.319545
# 3 2018-05-03 julia 97.410360 14.0 6.957883
# 4 2018-03-26 julia 480.206077 38.0 12.637002
# 5 2018-03-07 julia 78.892365 19.0 4.152230
# 6 2018-03-03 julia 878.671506 4.0 219.667877
# 7 2018-02-25 julia 905.172807 6.0 150.862135
# 8 2018-02-19 julia 970.016418 6.0 161.669403
# 9 2018-02-03 julia 669.073067 16.0 41.817067
# 10 2018-01-23 julia 636.926865 11.0 57.902442
# 11 2018-01-11 julia 790.107486 12.0 65.842291
# 12 2018-06-16 pandas 639.180696 NaN NaN
# 13 2018-05-21 pandas 565.432415 26.0 21.747401
# 14 2018-04-22 pandas 145.232115 29.0 5.008004
# 15 2018-04-13 pandas 379.964557 9.0 42.218284
# 16 2018-04-12 pandas 538.168690 1.0 538.168690
# 17 2018-03-20 pandas 783.572993 23.0 34.068391
# 18 2018-03-14 pandas 618.354489 6.0 103.059081
# 19 2018-02-10 pandas 859.278127 32.0 26.852441