関数をグループ キーとして渡すと、インデックス値ごとに 1 回関数が呼び出され、戻り値がグループ名として使用されることを理解しています。私が理解できないのは、列の値で関数を呼び出す方法です。
だから私はこれを行うことができます:
people = pd.DataFrame(np.random.randn(5, 5),
columns=['a', 'b', 'c', 'd', 'e'],
index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
def GroupFunc(x):
if len(x) > 3:
return 'Group1'
else:
return 'Group2'
people.groupby(GroupFunc).sum()
これにより、データが 2 つのグループに分割されます。そのうちの 1 つは長さ 3 以下のインデックス値を持ち、もう 1 つは長さ 3 以上のインデックス値を持ちます。しかし、列の値の 1 つを渡すにはどうすればよいでしょうか? たとえば、各インデックス ポイントの列 d の値が 1 より大きい場合、次のようにすればよいことがわかります。
people.groupby(people.a > 1).sum()
しかし、今後の参考のために、ユーザー定義関数でこれを行う方法を知りたいです。
何かのようなもの:
def GroupColFunc(x):
if x > 1:
return 'Group1'
else:
return 'Group2'
しかし、これをどのように呼ぶのですか?私は試した
people.groupby(GroupColFunc(people.a))
および同様の亜種ですが、これは機能しません。
列の値を関数に渡すにはどうすればよいですか? たとえば、 people.a > people.b でグループ化するなど、複数の列の値を渡すにはどうすればよいですか?