2017-07-30 20 views
1

在sql中,通过a.name从表a中选择a。*,count(a.id)作为N将给我一个新列N',其中包含count根据规范我的团队。什么是Pandas中的SQL计数相当于

但是,在熊猫中,如果我尝试df ['name'] .value_counts(),我会得到计数但不是原始数据框中的列。

有没有办法在单个步骤/语句中将计数作为原始数据框中的列?

+0

不是很多人都知道SQL足够弄清楚,查询这样做,如果你有一个样本数据集将是有益的什么与期望的输出。从你的描述中,'df.groupby('name').transform('count')'可能会起作用。 – ayhan

回答

2

看来你需要groupby + transform功能size

df = pd.DataFrame({'A':list('abcdef'), 
        'B':[4,5,4,5,5,4], 
        'C':[7,8,9,4,2,3], 
        'D':[1,3,5,7,1,0], 
        'E':[5,3,6,9,2,4], 
        'name':list('aaabcc')}) 

print (df) 
    A B C D E name 
0 a 4 7 1 5 a 
1 b 5 8 3 3 a 
2 c 4 9 5 6 a 
3 d 5 4 7 9 b 
4 e 5 2 1 2 c 
5 f 4 3 0 4 c 

df['new'] = df.groupby('name')['name'].transform('size') 
print (df) 
    A B C D E name new 
0 a 4 7 1 5 a 3 
1 b 5 8 3 3 a 3 
2 c 4 9 5 6 a 3 
3 d 5 4 7 9 b 1 
4 e 5 2 1 2 c 2 
5 f 4 3 0 4 c 2 

What is the difference between size and count in pandas?

+0

嗨Jezrael,我需要你的例子中显示的输出。但是,当我尝试执行相同的操作时,出现以下警告/错误:SettingWithCopyWarning: 正试图在来自DataFrame的切片副本上设置一个值。 尝试使用.loc [row_indexer,col_indexer] =值代替 – babsdoc

+0

我认为上面一行有问题,需要'copy()' - 检查[this](https://stackoverflow.com/a/45170475/2901002) – jezrael

+0

这是我在做什么dat1 = pd.read_csv(“C:\\ Test.csv”) dat2 = dat1 [['股票','日期','AdjClose','卷']] dat2 ['' count'] = dat2.groupby('Stock')['Stock']。transform('count') – babsdoc