代码:
for i in df["Date"].unique():
a = df[(df['Date']==i) & (df['Billable']=="Yes")]["Duration"].sum()
b = df[(df['Date']==i) & (df['Billable']=="Yes")]["Duration"].mean()
print(i,a,b)
以下代码返回此输出:
Jan, 2019 10
Aug, 2019 20
Feb, 2019, 40
June, 2019 30
这是我所需要的,因此我将其转换为如下数据帧:
d = {
"col1" : a,
"col2" : b,
}
data_test = pd.DataFrame(data=d, index=[i])
data_test
但这只能给我最后一个月的结果:
June, 2019 30
有没有办法使数据框架(data_test)每月返回,而不仅仅是最后一个?
答案 0 :(得分:0)
每次循环时,您将覆盖'a'和'b'的值。尝试附加它们并构建一个新的数据框。这样的事情将是使用您的方法执行此操作的一种方法:
a_list = []
b_list = []
for i in df["Date"].unique():
a = df[(df['Date']==i) & (df['Billable']=="Yes")]["Duration"].sum()
b = df[(df['Date']==i) & (df['Billable']=="Yes")]["Duration"].mean()
print(i,a,b)
a_list.append(a)
b_list.append(b)
d = {"col1" : a_list, "col2" : b_list}
data_test = pd.DataFrame(data=d)
答案 1 :(得分:0)
除了埃里克(Eric)的答案外,熊猫这样做的方法是:
import numpy as np
df[df['Billable'] == 'Yes'].groupby('Date').agg({'Duration': [np.sum, np.mean]})