2017-11-29 17 views
2

私は大きなデータセットを持っており、特定の条件(この場合、単語の最後の2文字、つまりsome_string [-1]を除くすべて)で特定の行をグループ化しようとしています。pandas:iterrows()を使って抽出した行からDataFrameを作成するには?

まず、行を選択し、単語の最初の部分としてキーを含む辞書に格納し、値をその条件を満たす行のタプルのリストとして格納します。

(これが最善の方法である場合、私は知らない、提案すること自由に感じなさい!)

def group_by_name(data, name_column): 
    #simple grouping of bookings according to everything except last two letters of name 
    buckets = {}; 
    i =0; 
    for index,booking in data.iterrows(): 
     buckets.setdefault(str(booking[name_column])[:-1],[]).append((index,booking)) 
    return buckets 

これはキーごとのオブジェクトのリストを返します - 私は、このようなデータフレームの中に、これらのオブジェクトを作り直すことができる方法私はそれらをより簡単に読んで操作することができますか?

答えて

1

私はあなたがgroupbyが必要だと思う:

data = pd.DataFrame({ 'D':[1,3,5,7,1], 
        'E':[5,3,6,9,2], 
        'F':['asd','tty','tty','tty','asd']}) 

print (data) 
    D E F 
0 1 5 asd 
1 3 3 tty 
2 5 6 tty 
3 7 9 tty 
4 1 2 asd 

for i, g in data.groupby(data['F'].str[:-2]): 
    print (i) 
    print (g) 

a 
    D E F 
0 1 5 asd 
4 1 2 asd 
t 
    D E F 
1 3 3 tty 
2 5 6 tty 
3 7 9 tty 
+0

はい、GROUPBYは私が探していたものでした! .applyを使用すると、上記の構文よりもうまく機能しました。ありがとう。 – mogget

+0

ようこそ。いい日! – jezrael

0

これは、あなたが欲しい上記のロジックを絞り込む役立つかもしれないパンダのドキュメントhereをチェックアウトいくつかの助け

df[df['A'] > 0] 
       A   B   C   D  E 0 
2000-01-01 0.469112 -0.282863 -1.509059 -1.135632 NaN NaN 
2000-01-02 1.212112 -0.173215 0.119209 -1.044236 NaN NaN 
2000-01-04 7.000000 -0.706771 -1.039575 0.271860 NaN NaN 
2000-01-07 0.404705 0.577046 -1.715002 -1.039268 NaN NaN 

のかもしれません。

関連する問題