为了账号安全,请及时绑定邮箱和手机立即绑定

添加 groupby 对象的各个数据帧的数字列的 Pythonic 方法

添加 groupby 对象的各个数据帧的数字列的 Pythonic 方法

繁花如伊 2023-06-27 10:43:05
我有一个时间序列数据,我将其分组,并且想将所有组的数字列相加。注意:这不是各个组的列的聚合,而是组对象中所有数据帧的相应单元格的总和。由于它是时间序列数据,因此数据帧中的一些列本质上保持相同,例如Region和Region_Code本身Time在数据帧中保持相同。我的伪代码是 -通过...分组Region_Code仅选择分组对象的数字列制作区域列表通过迭代区域列表和求和来调用组对象中的数据框让其他列像Region,Region_Code和Time但问题是,当我添加带有空数据帧的调用数据帧时,所有内容都变成空/空,所以最终我什么都没有。import pandas as pdcountries = ['United States','United States','United States','United States','United States', 'Canada', 'Canada', 'Canada', 'Canada', 'Canada', 'China', 'China', 'China', 'China', 'China']code = ['US', 'US','US','US','US','CAN','CAN','CAN','CAN','CAN', 'CHN','CHN','CHN','CHN','CHN']time = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5]temp = [2.1,2.2,2.3,2.4,2.5, 3.1,3.2,3.3,3.4,3.5, 4.1,4.2,4.3,4.4,4.5]pressure = [1.0,1.0,1.0,1.0,1.0, 1.1, 1.1, 1.1, 1.1, 1.1, 1.2,1.2,1.2,1.2,1.2]speed = [20,21,22,23,24, 10,11,12,13,14, 30,31,32,33,34]df = pd.DataFrame({'Region': countries, 'Time': time, 'Region_Code': code, 'Temperature': temp, 'Pressure': pressure, 'Speed': speed})countries_grouped = df.groupby('Region_Code')[list(df.columns)[3:]]country_list = ['US', 'CAN', 'CHN']temp = pd.DataFrame()for country in country_list:    temp += countries_grouped.get_group(country) ## <--- Failstemp# Had the above worked, the rest of the columns can be made as followstemp['Region'] = 'All'temp['Time'] = df['Time']temp['Region_Code'] = 'ALL'它看起来并不可潘多拉。最好的方法是什么?预期输出:    Region  Time    Region_Code     Temperature     Pressure    Speed0   All      1          ALL              9.3            3.3       601   All      2          ALL              9.6            3.3       632   All      3          ALL              9.9            3.3       663   All      4          ALL              10.2           3.3       694   All      5          ALL              10.5           3.3       72
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

我认为您需要聚合sum- 默认情况下排除所有非数字列,因此您可以通过DataFrame.reindex原始列添加它们,并通过以下方式替换缺失值ALL

print (df.groupby('Time', as_index=False).sum())

   Time  Temperature  Pressure  Speed

0     1          9.3       3.3     60

1     2          9.6       3.3     63

2     3          9.9       3.3     66

3     4         10.2       3.3     69

4     5         10.5       3.3     72


df = df.groupby('Time', as_index=False).sum().reindex(df.columns, axis=1, fill_value='ALL')

print (df)

  Region  Time Region_Code  Temperature  Pressure  Speed

0    ALL     1         ALL          9.3       3.3     60

1    ALL     2         ALL          9.6       3.3     63

2    ALL     3         ALL          9.9       3.3     66

3    ALL     4         ALL         10.2       3.3     69

4    ALL     5         ALL         10.5       3.3     72

编辑:对于自定义替换缺失值,请DataFrame.fillna与字典一起使用 - 具有替换值的列名称:


d = {'Region':'GLOBAL','Region_Code':'ALL'}

df1 = df.groupby('Time', as_index=False).sum().reindex(df.columns, axis=1).fillna(d)

print (df1)

   Region  Time Region_Code  Temperature  Pressure  Speed

0  GLOBAL     1         ALL          9.3       3.3     60

1  GLOBAL     2         ALL          9.6       3.3     63

2  GLOBAL     3         ALL          9.9       3.3     66

3  GLOBAL     4         ALL         10.2       3.3     69

4  GLOBAL     5         ALL         10.5       3.3     72


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信