2016-10-16 9 views
1

私の目標は、他のデータフレームから無作為にサンプリングし、新しいデータフレームの要約統計量を収集してリストに追加することです。理想的には、このプロセスを何度でも繰り返すことができます(ブートストラップなど)。他のデータフレームを無作為にサンプリングして構築したDataframeの要約統計情報

dfposlist = [OFdf, Firstdf, Seconddf, Thirddf, CFdf, RFdf, Cdf, SSdf] 

OFdf.head() 
    playerID OPW   POS salary 
87 bondsba01 62.061290 OF 8541667 
785 ramirma02 35.785630 OF 13050000 
966 walkela01 30.644305 OF 6050000 
859 sheffga01 29.090699 OF 9916667 
357 gilesbr02 28.160054 OF 7666666 

リスト内のすべてのデータフレームに同じヘッダーがあります。私が探している出力はこのようなものである

teamdist = [] 
for df in dfposlist: 
    frames = [df.sample(n=1)] 
team = pd.concat(frames) 

teamopw = team['OPW'].sum() 
teamsal = team['salary'].sum() 
teamplayers = team['playerID'].tolist() 

teamdic = {'Salary':teamsal, 'OPW':teamopw, 'Players':teamplayers} 
teamdist.append(teamdic) 

teamdist = [{'Salary':4900000, 'OPW':78.452, 'Players':[bondsba01, etc, etc]}] 

しかし、いくつかの理由でteamopw = team['OPW'].sum()などのすべての和アクションがない私は何をしようとしていることは、このようになります私がしたいどのように動作する、とだけteam['OPW']

print(teamopw) 
0.17118131814601256 
38.10700006434629 
1.5699939126695253 
32.9068837019903 
16.990760776263674 
18.22428871113601 
13.447706356730897 

でこの作業を取得する方法上の任意のアドバイスを要素を返しますか?ありがとう!

編集:次のような解決策。それが最も無作為な方法であるかどうかは分かりませんが、それは機能します。 (ランダムデータで)ここで

teamdist = [] 
team = pd.concat([df.sample(n=1) for df in dfposlist]) 

teamopw = team[['OPW']].values.sum() 
teamsal = team[['salary']].values.sum() 
teamplayers = team['playerID'].tolist() 

teamdic = {'Salary':teamsal, 'OPW':teamopw, 'Players':teamplayers} 
teamdist.append(teamdic) 
+0

私はこの問題を再作成することはできません。すべての反復はそうですか?印刷しているポイントを確認してください。あなたはそのシリーズで実行している別の操作はありますか?そして、なぜ1つのデータフレームの1レコードを連結するのか、またはあなたのインデントが投稿に含まれていませんか? – Parfait

答えて

2

は:

import pandas as pd 
import numpy as np 

dfposlist = dict(zip(range(10), 
        [pd.DataFrame(np.random.randn(10, 5), 
            columns=list('abcde')) 
        for i in range(10)])) 
for df in dfposlist.values(): 
    df['f'] = list('qrstuvwxyz') 

teamdist = [] 
team = pd.concat([df.sample(n=1) for df in dfposlist.values()]) 
print(team.info()) 

teamdic = team[['a', 'c', 'e']].sum().to_dict() 
teamdic['f'] = team['f'].tolist() 
teamdist.append(teamdic) 
print(teamdist) 

# Output: 
## team.info(): 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 10 entries, 1 to 6 
Data columns (total 6 columns): 
a 10 non-null float64 
b 10 non-null float64 
c 10 non-null float64 
d 10 non-null float64 
e 10 non-null float64 
f 10 non-null object 
dtypes: float64(5), object(1) 
memory usage: 560.0+ bytes 
None 

## teamdist: 
[{'a': -3.5380097363724601, 
    'c': 2.0951152809401776, 
    'e': 3.1439230427971863, 
    'f': ['r', 'w', 'z', 'v', 'x', 'q', 't', 'q', 'v', 'w']}] 
+0

文字列をどうやって扱いますか?もし、ヘッダ 'b'が文字列で、目的の出力が''b 'ならば:[strA、strB、strC、etc] ' –

+0

質問の数値の合計が必要だったとします。文字列では、それは異なる質問です。文字列操作の答えを得るために、詳細を尋ねることをお勧めします。私があなたに言うべき唯一のことは、文字列を何らかの方法で崩壊させなければならないということです。それらをリストに変換するか連結する必要があります。あなたの弦をどのように操作したいのかを教えても、依然としてあなたの質問の範囲に当てはまる場合は、それに従って私の答えを編集することができます。 – Kartik

+0

私は、列のすべての文字列をリストとして返すようにしたいと思います。あなたの例のデータを使用すると、出力目標は 'teamdist = [{'a:3.002、' c ':1.504、' f ':[w、x、y、z]]' –

関連する問題