13

したがって、データフレームのスライスを作成し、データフレームをコピーせずにそのスライスの最初の項目の値を設定したいと思います。例えば:

df = pandas.DataFrame(numpy.random.rand(3,1))
df[df[0]>0][0] = 0

ここでのスライスは無関係であり、単なる例であり、データ フレーム全体を再び返します。要は、例のようにすればコピー警告付きの設定になります(当然)。また、最初にスライスしてから、ILOC/IX/LOC を使用し、ILOC を 2 回使用してみました。つまり、次のようなものです。

df.iloc[df[0]>0,:][0] = 0
df[df[0]>0,:].iloc[0] = 0

そして、これらのどちらも機能しません。繰り返しますが、スライスされたバージョンだけであっても、データフレームのコピーを作成したくありません。

編集: マスクまたは IdxMax を使用する 2 つの方法があるようです。インデックスが一意の場合は IdxMax メソッドが機能し、そうでない場合はマスク メソッドが機能するようです。私の場合、インデックスは一意ではありません。最初の投稿で言及するのを忘れていました。

4

4 に答える 4

1

データフレームを検討するdf

df = pd.DataFrame(dict(A=[1, 2, 3, 4, 5]))

print(df)

   A
0  1
1  2
2  3
3  4
4  5

任意のスライスを作成するslc

slc = df[df.A > 2]

print(slc)

   A
2  3
3  4
4  5

とを使用してwithinslcの最初の行にアクセスします。dfindex[0]loc

df.loc[slc.index[0]] = 0
print(df)

   A
0  1
1  2
2  0
3  4
4  5
于 2017-03-05T22:10:59.137 に答える