2016-08-10 8 views
1

私は3つの列が含まれたデータセットがあります。どのようなI 必要、しかしPandasの他の2つの値に基づいて1つの列のカウントを計算するにはどうすればよいですか?

df['A'].value_counts() 
3 3 
2 2 
1 1 
Name: A, dtype: int64 

:明らかに私は私の列Aの値のカウントを取得するためにdf['A'].value_counts()を使用することができ、今

import pandas as pd 

df = pd.DataFrame({'A': [1,2,3,2,3,3], 
        'B': [1.0, 2.0, 3.0, 2.0, 3.0, 3.0],     
        'C': [0.0, 3.5, 1.2, 2.1, 3.1, 0.0]}) 

は、BCの関係に基づいてカウント値を変更することができます。例えば

df['B'][0] - df['C'][0] 
1.0 
df['B'][1] - df['C'][1] 
-1.5 

イム私の場合、私は1としてカウントする合計> 0をしたいと思い、-1としてカウントする< 0を合計し、0の和が0

、よく、としてカウントします私の目的のためにそう

、このような何かにBCターンを持つ:

df = pd.DataFrame({'A':  [1, 2, 3, 2, 3, 3], 
        'counts': [1, -1, 1, -1, -1, 1]}) 

そして、何とかそれを翻訳することができます:

3 2 
1 1 
2 -2 

私は後です。パンダを使ってどうすればいいですか?

答えて

4
import pandas as pd 
import numpy as np 

df['counts'] = np.sign(df.B - df.C) # use the numpy.sign to create the count column 
df.groupby('A')['counts'].sum()  # group the counts by column A and sum the value 

#A 
#1 1.0 
#2 -2.0 
#3 1.0 
#Name: counts, dtype: float64 
+0

パーフェクト、まさに私が必要なもの! –

2
df['counts'] = 0 
df.loc[df['B'] - df['C'] > 0, 'counts'] = 1 
df.loc[df['B'] - df['C'] < 0, 'counts'] = -1 
+0

一つの質問:。。私は 'DF [[ 'A'、 'カウント']] GROUPBY( 'A')集計(合計)。 df'は、左の列に「A、1,2,3」と「、1、-2、1」があります。 'A/blank'の部分が出力に現れる理由は分かりますか? –

関連する問題