首页 > 解决方案 > 我们如何计算数据框中的项目并将结果分配给数据框中的新列?

问题描述

我有看起来像这样的街道地址。

250 EAST HOUSTON STREET
211 EAST 3RD STREET
182 EAST 2ND STREET
511 EAST 11TH STREET
324 EAST 4TH STREET
324 EAST 4TH STREET
324 EAST 4TH STREET
324 EAST 4TH STREET
324 EAST 4TH STREET
324 EAST 4TH STREET
324 EAST 4TH STREET
324 EAST 4TH STREET
754 EAST 6TH STREET

我怎样才能在同一个数据框中得到计数,像这样?

250 EAST HOUSTON STREET 3
211 EAST 3RD STREET     1
182 EAST 2ND STREET     1
511 EAST 11TH STREET    1
324 EAST 4TH STREET     8
324 EAST 4TH STREET     8
324 EAST 4TH STREET     8
324 EAST 4TH STREET     8
324 EAST 4TH STREET     8
324 EAST 4TH STREET     8
324 EAST 4TH STREET     8
324 EAST 4TH STREET     8
754 EAST 6TH STREET     1

我要计算的字段名称是“Street”。我发现了一些计算欺骗的代码,但它会进行分组并将所有内容放入一个新的数据框中。我想将计数分配给同一数据框中的新列。谢谢!

标签: pythonpython-3.xpandasdataframe

解决方案


使用groupby+ transform。转换允许您将系列调用到新列。如果您不使用转换,那么您有一个与数据框不匹配的合并系列,您的列将改为填充NaN值:

import pandas as pd
# df = pd.read_clipboard('\s\s+', header=None).rename({0: 'Street'}, axis=1) # how I read in your data from your StackOverflow question
df['Count'] = df.groupby('Street')['Street'].transform('count')
df
Out[1]: 
                     Street  Count
0   250 EAST HOUSTON STREET  1
1       211 EAST 3RD STREET  1
2       182 EAST 2ND STREET  1
3      511 EAST 11TH STREET  1
4       324 EAST 4TH STREET  8
5       324 EAST 4TH STREET  8
6       324 EAST 4TH STREET  8
7       324 EAST 4TH STREET  8
8       324 EAST 4TH STREET  8
9       324 EAST 4TH STREET  8
10      324 EAST 4TH STREET  8
11      324 EAST 4TH STREET  8
12      754 EAST 6TH STREET  1

推荐阅读