pd.DataFrame仅显示循环的最后结果

时间:2020-03-09 19:01:26

标签: python pandas

代码:

  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)每月返回,而不仅仅是最后一个?

2 个答案:

答案 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]})
相关问题