[解決済み] pandasを使用して2つの列を比較する
2022-03-02 10:07:28
質問
これを起点に
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
Out[8]:
one two three
0 10 1.2 4.2
1 15 70 0.03
2 8 5 0
のようなものを使いたいのですが。
if
文をpandas内で使用することができます。
if df['one'] >= df['two'] and df['one'] <= df['three']:
df['que'] = df['one']
基本的には、各行を
if
ステートメントを使用して、新しいカラムを作成します。
ドキュメントによると
.all
が、例がない...。
どのように解決するのですか?
を使用することができます。
np.where
. もし
cond
はブーリアン配列であり
A
と
B
が配列の場合
C = np.where(cond, A, B)
はCと等しいと定義しています。
A
ここで
cond
はTrue、そして
B
ここで
cond
はFalseです。
import numpy as np
import pandas as pd
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df['que'] = np.where((df['one'] >= df['two']) & (df['one'] <= df['three'])
, df['one'], np.nan)
イールド
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
もし、複数の条件がある場合は
np.select
の代わりに
たとえば、次のようにしたい場合
df['que']
と同じです。
df['two']
とき
df['one'] < df['two']
であれば
conditions = [
(df['one'] >= df['two']) & (df['one'] <= df['three']),
df['one'] < df['two']]
choices = [df['one'], df['two']]
df['que'] = np.select(conditions, choices, default=np.nan)
イールド
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN
とすることができれば
df['one'] >= df['two']
いつ
df['one'] < df['two']
は
偽の場合、条件と選択肢は次のように単純化されます。
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
(の場合、その仮定は成り立たないかもしれません。
df['one']
または
df['two']
にはNaNが含まれます)。
注意事項
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
は文字列の値を持つDataFrameを定義しています。数値に見えるので、これらの文字列を浮動小数点に変換する方がよいでしょう。
df2 = df.astype(float)
しかし、文字列は一文字ずつ比較するのに対し、浮動小数点は数値で比較するため、結果が変わってきます。
In [61]: '10' <= '4.2'
Out[61]: True
In [62]: 10 <= 4.2
Out[62]: False
関連
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] 空のPandas DataFrameを作成し、それを埋める?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac