gpt4 book ai didi

python - Pandas 数据帧组 : sum one column, 从其他人那里获取第一个元素

转载 作者:行者123 更新时间:2023-12-01 00:24:09 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框

x = pd.DataFrame.from_dict({'row':[1, 1, 2, 2, 3, 3, 3], 'add': [1, 2, 3, 4, 5, 6, 7], 'take1': ['a', 'b', 'c', 'd', 'e', 'f', 'g'], 'take2': ['11', '22', '33', '44', '55', '66', '77'], 'range': [100, 200, 300, 400, 500, 600, 700]})


add range row take1 take2
0 1 100 1 a 11
1 2 200 1 b 22
2 3 300 2 c 33
3 4 400 2 d 44
4 5 500 3 e 55
5 6 600 3 f 66
6 7 700 3 g 77

我想按 row 分组列,然后将 add 中的条目相加列,但从 take1 中获取第一个条目和 take2 ,并从范围中选择最小值和最大值:
   add    row take1 take2  min_range   max_range
0 3 1 a 11 100 200
1 7 2 c 33 300 400
2 18 3 e 55 500 700

最佳答案

使用 DataFrameGroupBy.agg 通过 dict,但是需要进行一些清理,因为得到 MultiIndex在列中:

#create a dictionary of column names and functions to apply to that column

d = {'add':'sum', 'take1':'first', 'take2':'first', 'range':['min','max']}

#group by the row column and apply the corresponding aggregation to each
#column as specified in the dictionary d
df = x.groupby('row', as_index=False).agg(d)

#rename some columns
df = df.rename(columns={'first':'', 'sum':''})
df.columns = ['{0[0]}_{0[1]}'.format(x).strip('_') for x in df.columns]
print (df)
row take1 range_min range_max take2 add
0 1 a 100 200 11 3
1 2 c 300 400 33 7
2 3 e 500 700 55 18

详细信息:根据字典中指定的函数聚合列:
df = x.groupby('row', as_index=False).agg(d)

行范围 take2 take1 add
最小最大第一个和
0 1 100 200 11 3
1 2 300 400 33 c 7
2 3 500 700 55 18

替换列名 sumfirst''会导致

行范围 take2 take1 add
最小最大
0 1 100 200 11 3
1 2 300 400 33 c 7
2 3 500 700 55 18

使用字符串格式化程序对列进行列表理解将获得所需的列名。将其分配给 df.columns将获得所需的输出。

关于python - Pandas 数据帧组 : sum one column, 从其他人那里获取第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46303919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com