对第一列pandas数据帧的所有唯一值求和的第二列值的正确方法

时间:2015-08-28 18:59:17

标签: python pandas

我是熊猫的新手。我有一个数据框,其中包含第一列中的星期几和第二列中的值列表。我想总结每个星期的总价值。这样:

        day               values 
0   Thursday                 3
1   Thursday                 0
2   Friday                   0
2   Friday                   1
4   Saturday                 3
5   Saturday                 1
etc...

会变成:

    day               values 
0   Thursday                 3
1   Friday                   1
2   Saturday                 4
etc...

使用summing the number of occurrences per day pandas我实现了我想要的目标: - 原始df称为value_frame

values_on_day =pd.DataFrame(value_frame.groupby(value_frame.day).apply(lambda subf: subf['values'].sum()))

然而,值和工作日被塞进一个单元格中,以便:     print dict(values_on_day) 等于:

    {0: day
Friday        3
Monday        4
Saturday      7
Sunday       22
Thursday     26
Tuesday       2
Wednesday     4
Name: 0, dtype: int64}

我编写了一个解决方法,将列转换为dicts然后列表然后返回到dict并转换回df,但显然这不是这样做的方法。

请您告诉我在原始数据框中获得每周每一天总价值的正确方法吗?

1 个答案:

答案 0 :(得分:2)

我同意@Primer。这是编写您想要的代码的正确方法。 我已更新我的答案,添加index作为工作日编号。

import pandas as pd
import time

df = pd.DataFrame({'day': ['Thursday', 'Thursday', 'Friday', 'Friday', 'Saturday', 'Saturday'], 'values': [3,0,0,1,3,1]})
result = df.groupby('day').sum()
# Reseting the index
result.reset_index(inplace=True)
# Creating a new index as the weekday number for each day
result.index = result['day'].apply(lambda x: time.strptime(x, '%A').tm_wday)
# Renaming the index
result.index.names = ['weekday']
# Sorting by index
result.sort_index(inplace=True)
print(result)

给出:

              day  values
weekday                  
3        Thursday       3
4          Friday       1
5        Saturday       4