groupby( 'name')を実行し、他の列でmean()関数を使用した後、このようなシリーズがあります
name
383 3.000000
663 1.000000
726 1.000000
737 9.000000
833 8.166667
1.000000の平均値で行を除外する方法を教えてもらえますか?ありがとう、そして私はあなたの助けに大いに感謝します。
回答:
In [5]:
import pandas as pd
test = {
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
}
s = pd.Series(test)
s = s[s != 1]
s
Out[0]:
383 3.000000
737 9.000000
833 8.166667
dtype: float64
sしてから式で2回使用する必要がない)私は好みます。ただし、パンダ0.18からのみ機能します。
パンダバージョン0.18+から、シリーズのフィルタリングも以下のように実行できます
test = {
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
}
pd.Series(test).where(lambda x : x!=1).dropna()
チェックアウト:http: //pandas.pydata.org/pandas-docs/version/0.18.1/whatsnew.html#method-chaininng-improvements
以下のようDACWが指摘し、ある方法チェインの改善あなたは非常にうまく探しているものを行うパンダ0.18.1では。
を使用する代わりに.where、関数を.locインデクサーまたはシリーズインデクサーのいずれかに渡して[]、次の呼び出しを回避できます.dropna。
test = pd.Series({
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
})
test.loc[lambda x : x!=1]
test[lambda x: x!=1]
同様の動作がDataFrameクラスとNDFrameクラスでサポートされています。
もう1つの方法は、最初にDataFrameに変換し、クエリメソッドを使用することです(numexprがインストールされていると仮定します)。
import pandas as pd
test = {
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
}
s = pd.Series(test)
s.to_frame(name='x').query("x != 1")
私の場合、値が文字のタプルであるパンダシリーズがありました:
Out[67]
0 (H, H, H, H)
1 (H, H, H, T)
2 (H, H, T, H)
3 (H, H, T, T)
4 (H, T, H, H)
したがって、インデックスを使用して系列をフィルタリングできますが、必要なインデックスを作成するために必要ですapply。私の条件は、「「H」が1つだけあるすべてのタプルを検索する」です。
series_of_tuples[series_of_tuples.apply(lambda x: x.count('H')==1)]
私はそれが「連鎖可能」ではないことを認めます(つまり、series_of_tuples2回繰り返すことに注意してください。一時的な級数を変数に格納して、apply(...)を呼び出すことができるようにする必要があります)。
ブールインデックスを生成するために要素ごとに動作できる他のメソッド(以外.apply(...))もあります。
次のような連鎖可能な関数を使用した他の多くの回答(承認された回答を含む):
.compress().where().loc[][]これらは、シリーズの個々の値ではなく、シリーズに適用される呼び出し可能オブジェクト(ラムダ)を受け入れます!
したがって、上記の条件/呼び出し可能/ラムダを次のようなチェーン可能な関数のいずれかで使用しようとすると、一連のタプルが奇妙に動作しました.loc[]。
series_of_tuples.loc[lambda x: x.count('H')==1]
エラーが発生します:
KeyError: 'レベルHは名前と同じである必要があります(なし)'
非常に混乱していましたが、Series.countseries_of_tuples.count(...)関数を使用しているようです。これは私が望んでいたものではありません。
別のデータ構造の方が良いかもしれないことを認めます。
これにより、一連の文字列が作成されます(つまり、タプルを連結し、タプル内の文字を1つの文字列に結合します)。
series_of_tuples.apply(''.join)
だから私はチェーン可能なものを使うことができますSeries.str.count
series_of_tuples.apply(''.join).str.count('H')==1