2017-07-30 41 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