【问题标题】:correct way to sum values of second column for all unique values of first column pandas dataframe为第一列熊猫数据框的所有唯一值求和第二列值的正确方法
【发布时间】:2015-08-29 16:10:54
【问题描述】:

我是熊猫新手。我有一个数据框,第一列是星期几,第二列是值列表。我想总结一下每个工作日的总价值。所以:

        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()))

但是,值和工作日被填充到一个单元格中,以便: 打印字典(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,但显然这不是这样做的方法。

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

【问题讨论】:

  • 这应该可以工作:df.groupby('day').sum(),其中df 是您的第一个数据帧。
  • 快了! df.head()[5 rows x 2 columns] 给出答案print df.groupby('day').sum()[7 rows x 1 columns] 给出答案,看起来它认为值列名称是标题。

标签: python pandas


【解决方案1】:

我同意@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

【讨论】:

  • 啊!所以我现在更好地理解了这个问题。 python 没有将值视为标题(正如我之前在对 Primer 的回答中所想的那样),它正确地将其视为列名,并将天数分配为索引值!谢谢你。
  • 添加编号索引的最佳方法是执行以下操作:days_of_week = df.groupby('day').sum(),其中:value_name = days_of_week.columns[0],以及“days_name = days_of_week.index.name”,我们可以制作如下字典: new_dict = {days_name:days_of_week.index, value_name:list(days_of_week[days_name])} 然后做new_df = pd.DataFrame(new_dict) ?
  • 我了解到您想在DataFrame 中添加一个index,作为每天的工作日编号。我以这种方式更新我的答案。
  • 这是一个比我想象的更好的答案。非常感谢罗曼!
猜你喜欢
  • 2016-12-28
  • 2019-11-19
  • 2017-02-20
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 2018-08-16
相关资源
最近更新 更多