私は以前に同様の質問質問:Pandas Conditional Column Countパンダ条件付き列数(複雑なマッピング)
をしかし、そのように修正:
私はこのようになりますデータフレームがあります。
a1 | a2 | b3 | b4 | b5 | c | d1 | d2 | d3 | d4 | d5
1 | 2 | 3 | 4 | 5 | 1 | 1 | 0 | 0 | 0 | 0
1 | 4 | 5 | 3 | 2 | 0 | 0 | 1 | 1 | 1 | 0
2 | 3 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1
を私は"a_count"と "b_count"の2つの列を作成する必要があります。
本質的に、D1-D5でブールフラグはA1/A2/B3/B4/B5に相当します。即ち、第1の行において、d1に対して、「1」は、a1の下の第1の行に対する実体に対応する。
d1-d5の列は、a1/a2/b3/b4/b5の列と均等に一致すると見なすことができます(つまり、合計#は等しくなり、またはbに対応する「d」列があります)。
私は「a_count」と「b_count」の列を持っている私の元の質問に似た何かをしたいが、条件が若干異なっています。以前は、すべてのものに対して1つの列 'd'がありました。現在、特定の列に対応するように分割しているので...
'a'で始まる列は、に対応します。 'd'列== 1、c == 0行全体に対して。だから、例えば:
anyone = df[['c', 'd']].eq(1).any(1)
df['a_count'] = df.filter(like='a').eq(1).sum(1) * anyone
df['b_count'] = df.filter(like='b').eq(1).sum(1) * anyone
しかし、それに伴う問題は、私はできないということである。
a1 | a2 | b3 | b4 | b5 | c | d1 | d2 | d3 | d4 | d5 | a_count | b_count
1 | 2 | 3 | 4 | 5 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0
1 | 4 | 5 | 3 | 2 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0
2 | 3 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1
私は当初、(ユーザーが元のスレッドにコメントしていること)、このようなものを使用するのではと思いましたd1、a2/d2、b3/d3、b4/d4、b5/d5の間の一致を保証するために、
私の直感は、(下記参照)本当に複雑np.whereステートメントを使用することです。しかし、これを行うには、よりエレガントな方法があった場合、私はありました
df['a_count'] = df['z1'] + df['z2']
df['b_count'] = df['z3'] + df['z4'] + df['z5']
はので、私はこれを行うための、よりエレガントな方法であることを次に
df['z1'] = np.where(((df['c'] == 0) & (df['a1'] == 1) & (df['d1'] == 1), 1, 0)
df['z2'] = np.where(((df['c'] == 0) & (df['a2'] == 1) & (df['d2'] == 1), 1, 0)
df['z3'] = np.where(((df['c'] == 0) & (df['b3'] == 1) & (df['d3'] == 1), 1, 0)
df['z4'] = np.where(((df['c'] == 0) & (df['b4'] == 1) & (df['d4'] == 1), 1, 0)
df['z5'] = np.where(((df['c'] == 0) & (df['b5'] == 1) & (df['d5'] == 1), 1, 0)
、...知りませんでした無駄な列を作成せず、テーブルを不必要に大きくしないでください...
あなたがd
最初に、マッピング
a
ため
b
列を
dict
を使用することができます
私は理解している場合わかりません。 a = {'a1': 'd1'、 'a2': 'd2'} 'と ' b = {'b4': 'd4'、 'b5': 'd5' 'b3': 'd3'} '? – jezrael
もしc == 0&a1 == 1&d1 == 1ならば、それは1 と数えます。それに加えて、c == 0&a2 == 1&d2 == 1なら、a_count total 2 もし: c == 0&a2 == 1&d2 == 0の場合、a_countの合計はちょうど1(最初の値から)です。 辞書を使用してデータフレームをマスクすることはできますか? – shishy
しかし、あなたのコードは 'a_count = 0,1,2'と' b_count = 0,2,2'を返さないので、ちょっと混乱します。どうして? – jezrael