失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python自定义列名和长度输出_关于python:如何为size()列指定名称?

python自定义列名和长度输出_关于python:如何为size()列指定名称?

时间:2024-07-24 11:27:20

相关推荐

python自定义列名和长度输出_关于python:如何为size()列指定名称?

我正在GroupBy结果上使用.size(),以便计算每组中有多少项。

我希望将结果保存到一个新的列名,而不手动编辑列名数组,如何完成?

谢谢

这就是我所尝试的:

grpd = df.groupby(['A','B'])

grpd['size'] = grpd.size()

grpd

我得到的错误是:

TypeError: 'DataFrameGroupBy' object does not support item assignment

(on the second line)

值得注意的是,对于一个列来说,size是一个糟糕的选择,因为它是熊猫下每个对象的内置方法,所以您只能通过getitem检索,而不能通过getattr检索。

dataframegroupby对象的.size()内置方法实际返回的是一个具有组大小的序列对象,而不是一个数据帧。如果需要一个数据帧,其列为组大小,由组索引,并具有自定义名称,则可以使用.to_frame()方法,并使用所需的列名称作为其参数。

grpd = df.groupby(['A','B']).size().to_frame('size')

如果您希望组再次成为列,可以在末尾添加一个.reset_index()。

df.groupby(...)的结果不是数据帧。要返回数据帧,必须对每个组应用一个函数,转换组中的每个元素,或者过滤组。

似乎您需要一个数据帧,其中包含(1)EDOCX1中的所有原始数据(1)和(2)每组中的数据量计数。这些东西有不同的长度,所以如果它们需要进入同一个数据帧,您需要冗余地列出大小,即每个组中的每一行。

df['size'] = df.groupby(['A','B']).transform(np.size)

(旁白:如果您能显示简洁的样本输入和预期的结果,这很有帮助。)

耶,变换!

我还发现这个几乎是相等的(创建了一个新的数据帧),但不确定它在效率方面如何与您的解决方案进行比较/questions/10373660/…

在一个玩具例子中,解决方案更有效,但是在实际数据中,会返回一个错误/acsmxcd5。

在pandas 20.3中,@jezraels的df['size'] = df.groupby(['A','B']) .A .transform(np.size)工作;如果没有.A你会得到"valueerror:错误的项目数通过2,placement意味着1",即"得到2列,需要1"。

你需要transformsizelen的df和以前一样:

注意事项:

这里有必要在groupby后加一列,否则会出错。由于GroupBy.size也计算NaN,所以使用哪一列并不重要。所有列的工作方式相同。

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']

, 'B': ['a', 'c', 'c','b','b']})

print (df)

A B

0 x a

1 x c

2 x c

3 y b

4 y b

df['size'] = df.groupby(['A', 'B'])['A'].transform('size')

print (df)

A B size

0 x a 1

1 x c 2

2 x c 2

3 y b 2

4 y b 2

如果需要在df的aggregating df到len中设置列名,则df的aggregating len明显与以前不同:

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']

, 'B': ['a', 'c', 'c','b','b']})

print (df)

A B

0 x a

1 x c

2 x c

3 y b

4 y b

df = df.groupby(['A', 'B']).size().reset_index(name='Size')

print (df)

A B Size

0 x a 1

1 x c 2

2 y b 2

很好。但是,如果我有多个索引,我该怎么做呢?

@Sotos如果使用熊猫的最新版本,同样的方法。

那么像...reset_index('V1', name = 'size')这样的东西?

@索托斯,嗯,它不是这样工作的。需要.reset_index().rename(columns='index':'col', 'anothercol':'col2')。

这正是我最后所做的…(full_df .set_index('cdatetime') .groupby(['Cluster', 'source', 'action', pd.Grouper(freq = 'H', sort = True)]) .size() .reset_index(['Cluster', 'source', 'action']) .rename(columns={0: 'cnt'}) )

假设n是数据帧的名称,cst是要表示的项的编号。下面的代码给出下一列中的计数

cstn=Counter(n.cst)

cstlist = pd.DataFrame.from_dict(cstn, orient='index').reset_index()

cstlist.columns=['name','cnt']

n['cnt']=n['cst'].map(cstlist.loc[:, ['name','cnt']].set_index('name').iloc[:,0].to_dict())

希望这能奏效

如果觉得《python自定义列名和长度输出_关于python:如何为size()列指定名称?》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。