首先很抱歉,如果标题不是很清楚,但我不太知道如何放置(或搜索它)。
我有一个类似于以下内容的 DataFrame (df):
Num Let
0 1 a
1 2 b
2 3 c
3 4 d
4 1 a
5 2 b
6 1 a
我的目的是创建一个新的 df (df_new),其中一列仅包含 df['Let'] 列的一个实例,另一列包含它们在 df['Num'] 中的值的总和。
我所做的一切都很好,但我认为它可以以更pythonic的方式完成。此外,我需要多次将此代码应用于大型数据集。结果 (df_new) 应该是:
Let Count Sum
0 a 3 3
1 b 2 4
2 d 1 4
3 c 1 3
我的代码:
# Create df_new
df_new = df['Let'].value_counts().rename_axis('Letters').reset_index(name='Count')
# Find indexes of each instance in df['Let']
def find_indexes(entry):
x = df.index[df['Let'] == entry].tolist()
return x
indexes = [find_indexes(x) for x in a]
# Transform into dictionary
pairs = list(zip(a, indexes))
my_dict = dict(pairs)
def find_sum(entry):
index_list = my_dict[entry] # Get the proper index list
nums = []
for i in index_list:
x = df['Nums'][i]
nums.append(x)
return sum(nums)
df_new['Sum'] = [find_sum(x) for x in df_new['Letters']]
提前致谢!
df.groupby("Let").agg(["count", "sum"])
输出
# count sum
# Let
# a 3 3
# b 2 4
# c 1 3
# d 1 4
要重置"Let"
索引,请使用reset_index
:
df.groupby("Let")["Num"].agg(["count", "sum"]).reset_index()
# Let count sum
# 0 a 3 3
# 1 b 2 4
# 2 c 1 3
# 3 d 1 4
注意:这里,我["Num"]
在 之后指定groupby
删除多级列。
另一种写法是:
df.groupby("Let").agg(count=("Num": lambda x: x.count()),
sum=("Num": lambda x: x.sum())) \
.reset_index()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句