2015-04-22 107 views
1

我有这个数据帧:如何根据特定的行值来计算列中值的数量?

 Outlook  Temperature PlayTennis Value 

0  Sunny   60   Yes   1 

1  Sunny   70   Yes   1 

2  Sunny   40   No   1 

3 Overcast   40   No   1 

4 Overcast   60   Yes   1 

5 Overcast   50   Yes   1 

6 Overcast   70   Yes   1 

7 Overcast   80   Yes   1 

8  Rain   65   No   1 

9  Rain   70   Yes   1 

,我想这

Outlook Yes No 

Sunny  2  1 

Overcast 4  1 

Rain  1  1 

不能确定使用基于晴天/多云/雨

+0

欢迎来到Stack Overflow!通常希望在这里你要么显示你写过的代码,要么描述你为解决问题所做的研究。由于您的问题目前正在撰写,这听起来像是对代码的请求。你有没有尝试过与你分享? – skrrgwasme

回答

0

这是怎么回事?

df.groupby('Outlook').apply(lambda g: g['PlayTennis'].value_counts()) 

,或者为您的确切规格:

df.groupby('Outlook').apply(lambda g: g['PlayTennis'].value_counts()).unstack(1) 

甚至更​​短:

df.groupby('Outlook')['PlayTennis'].value_counts().unstack(1) 
0
计数yesses和NOS什么命令

这里有一些开始与:

forecasts = [ 
    ["sunny", "yes"], 
    ["sunny", "yes"], 
    ["sunny", "no"], 
    ["overcast", "no"], 
    # more forecasts ... 
] 
myForecasts = {} 
for forecast in forecasts: 
    if forecast[0] not in myForecasts: 
     myForecasts[forecast[0]] = [0, 0] 

    if forecast[1] == "yes": 
     myForecasts[forecast[0]][0] += 1 

    else: 
     myForecasts[forecast[0]][1] += 1 

print("Outlook | Yes | No") 
for myForecast in myForecasts: 
    print("{} | {} | {}".format(myForecast, myForecasts[myForecast][0], myForecasts[myForecast][1])) 

我好这有助于一些。下次请告诉我们你已经完成了功课。

+0

你能帮我用熊猫做这个吗? – Parth

+0

对不起,我没有熊猫经验;你到底需要什么帮助? – m0dem

0

你可以使用pd.pivot_table解决这个

In [88]: pd.pivot_table(df, index='Outlook', cols='PlayTennis', 
         values='Value', aggfunc='sum') 
Out[88]: 
PlayTennis No Yes 
Outlook 
Overcast  1 4 
Rain   1 1 
Sunny  1 2 

另外,还可以groupby你的d ata 'Outlook', 'PlayTennis'获得计数并使用unstack('PlayTennis')

In [87]: df.groupby(['Outlook', 'PlayTennis']).size().unstack('PlayTennis') 
Out[87]: 
PlayTennis No Yes 
Outlook 
Overcast  1 4 
Rain   1 1 
Sunny  1 2 
相关问题