2017-05-01 8 views
-3

エキス名

KEY_ID READY STEADY  GO 
001  Yes  Maybe  123 
002  No  Maybe  123 
003  Yes  Sometimes 234 
004  Yes  Later  234 
005  No  Sometimes 345 

私は(df.countを使用)値がここで満たされた回数を確認するためには、毎回5であります:

KEY_ID 5 
READY 5 
STEADY 5 
GO  5 

ただし、STEADY列の値が何回使用されているかを確認したいと思います。私は私を与えるabc = df['STEADY'].value_counts()でこれを行う:

forループで
Sometimes 2 
Maybe  2 
Later  1 

次のように私は)(value_countsで私が作成したABCの値の情報を抽出することができます。

for i in abc: 
    print(i) 

をしかし、私も、私はしたくないとしてその後、多分、時にはをの名前を取得するには

for i,j in enumerate(abc): 
    print(i); print(j) 

を含め、いくつかの方法を試してみました手動で入力してください。 value_counts()値のこれらの名前を抽出するにはどうすればよいですか?

+1

あなたが十分な情報を提供していません。表示するもののように見える 'DataFrame'という名前の変数を持つ場合、' DataFrame.sum() 'との総和のようなものを得る方法はありません。すべての答えは、あなたがグループになることを前提としていることに注意してください。他の読者が混乱しないように明確にしてください。 – piRSquared

+0

@probsあなたは、あなたの開始データがどのように整理されているか教えてください。あなたはpplが推測しようとしているところで答えを得ています。あなたの質問を明確にする。 –

+0

編集中、不明な質問がありました – Probs

答えて

1

groupby()をお探しですか?

import pandas as pd 
lst = [['Apple', 1], ['Orange', 1], ['Apple', 2], ['Orange', 1], ['Apple', 3], ['Orange', 1]] 
df = pd.DataFrame(lst) 
df.columns = ['fruit', 'amount'] 

df.groupby('fruit').sum() 
+0

こんにちはJan、いいえ私はPandasで 'Dataframe.sum'を実行したときにすでに存在する「Apple」と「Orange」の名前を抽出したいだけです – Probs

0
import pandas as pd 
rowdata = [['Apple', 1], ['Orange', 1], ['Apple', 2], ['Orange', 1], ['Apple', 3],['Orange', 1]] 
df = pd.DataFrame(rowdata) 
df.groupby(0).sum() 

これは、以下に示すデータフレームのようになります、

 1 
0 
Apple 6 
Orange 3 

しかし、単にdf.sum()次のようになります、

0 AppleOrangeAppleOrangeAppleOrange 
1         9 

私はあなたが期待している願っています最初のもののように..

0

IIUC:

In [339]: df 
Out[339]: 
    name val 
0 Apple 1 
1 Orange 1 
2 Apple 2 
3 Orange 1 
4 Apple 3 
5 Orange 1 

In [340]: df.groupby('name', as_index=False)['val'].sum() 
Out[340]: 
    name val 
0 Apple 6 
1 Orange 3 

In [341]: df.groupby('name', as_index=False)['val'].sum()['name'] 
Out[341]: 
0  Apple 
1 Orange 
Name: name, dtype: object 

In [342]: df.groupby('name', as_index=False)['val'].sum()['name'].tolist() 
Out[342]: ['Apple', 'Orange'] 
0

あなたがisinboolean indexingすることにより、第1フィルタ処理したいようだ:次にgroupby

print (df) 
     A B 
0 Peach 3 
1 Pear 6 
2 Apple 1 
3 Orange 1 
4 Apple 2 
5 Orange 1 
6 Apple 3 
7 Orange 1 

df1 = df[df['A'].isin(['Apple','Orange'])] 
print (df1) 
     A B 
2 Apple 1 
3 Orange 1 
4 Apple 2 
5 Orange 1 
6 Apple 3 
7 Orange 1 

aggregatesum

df2 = df1.groupby('A', as_index=False)['B'].sum() 
print (df2) 
     A B 
0 Apple 6 
1 Orange 3 

別の解決策は、リストで値のみを選択しgroupbyと集計firstです:

df1 = df.groupby('A')['B'].sum() 
df2 = df1.loc[['Apple','Orange']].reset_index() 
print (df2) 
     A B 
0 Apple 6 
1 Orange 3