私は10列のデータフレームを持っています。私は別の番号で各列を分割したいと思います。数字のリストでデータフレームを分割する方法は?また、リストに0があります。ゼロで割った場合、その列の数字を1にします。これを行う方法は?Python - データフレームを数値のリストで除算します。
おかげ
私は10列のデータフレームを持っています。私は別の番号で各列を分割したいと思います。数字のリストでデータフレームを分割する方法は?また、リストに0があります。ゼロで割った場合、その列の数字を1にします。これを行う方法は?Python - データフレームを数値のリストで除算します。
おかげ
df = pd.DataFrame(np.random.rand(10, 10))
lst = np.array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0])
numpyの配列としてデータフレームdf
とリストlst
を与えられた後フィルターをかけるためにマスクを使うことができます。マスクを使用することで、ブール値スライシングを使用して、対応するゼロ値がlst
の列だけを取得できます。 で簡単に非ゼロにアクセスし、スライスすることもできます。
m = lst == 0
# assign the number 1 to all columns where there is a zero in lst
df.values[:, m] = 1
# do the division in place for all columns where lst is not zero
df.values[:, ~m] /= lst[~m]
print(df)
0 1 2 3 4 5
0 0.195316 1.0 0.988503 1.0 0.981752 1.0
1 0.136812 1.0 0.887689 1.0 0.346385 1.0
2 0.927454 1.0 0.733464 1.0 0.773818 1.0
3 0.782234 1.0 0.363441 1.0 0.295135 1.0
4 0.751046 1.0 0.442886 1.0 0.700396 1.0
5 0.028402 1.0 0.724199 1.0 0.047674 1.0
6 0.680154 1.0 0.974464 1.0 0.717932 1.0
7 0.636310 1.0 0.191252 1.0 0.777813 1.0
8 0.766330 1.0 0.975292 1.0 0.224856 1.0
9 0.335766 1.0 0.093384 1.0 0.547195 1.0
あなたはdiv
を使用して、1
によって値L
で0
を置き換えることができます。
df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6],
'C':[7,8,9],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3]})
print (df)
A B C D E F
0 1 4 7 1 5 7
1 2 5 8 3 3 4
2 3 6 9 5 6 3
L = [0,1,2,3,0,3]
s = pd.Series(L, index=df.columns)
df1 = df.div(s)
df1[s.index[s == 0]] = 1
print (df1)
A B C D E F
0 1.0 4.0 3.5 0.333333 1.0 2.333333
1 1.0 5.0 4.0 1.000000 1.0 1.333333
2 1.0 6.0 4.5 1.666667 1.0 1.000000
このエラーMSGを得た:「例外TypeError:ブロック値がゼロによる除算を浮遊して([0、0、0、0、0])配列を操作できませんでした」 – thatMeow
恐ろしい、あなたは説明することができますここでマスクを使用する目的は? – thatMeow
@thatMeow説明の更新されたポストを参照してください。 – piRSquared