Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python・pandas】入力値が3と5の両方で割り切れる場合にDataFrameの最初の列をシフトし、欠損値を埋める方法

問題の概要

pandasのDataFrameに対して、「ユーザーから入力された値が3と5の両方で割り切れる場合のみ、最初の列を横方向に1つシフトし、シフトによって生じた欠損値(NaN)をその入力値で埋める」という処理を実装する方法を解説します。

入出力のイメージは次のとおりです。

 one two three
0 1   10  100
1 2   20  200
2 3   30  300
値を入力してください: 15
 one two three
0 15  1   10
1 15  2   20
2 15  3   30

入力値「15」は3でも5でも割り切れるため、シフト後に空いた先頭列のセルが「15」で埋められています。

解決のアプローチ

この問題は、次の手順で解決できます。

  • DataFrameを定義する
  • shift()メソッドで最初の列をシフトする
data.shift(periods=1, axis=1)
  • ユーザー入力を取得し、3と5の両方で割り切れるかを判定する。条件を満たす場合はfill_value引数で欠損値を入力値で埋め、満たさない場合はそのままNaNを表示します。
user_input = int(input("値を入力してください: "))
if user_input % 3 == 0 and user_input % 5 == 0:
    print(data.shift(periods=1, axis=1, fill_value=user_input))
else:
    print(data.shift(periods=1, axis=1))

完全な実装コード

処理の全体像をつかむために、完全なサンプルコードを確認しましょう。

import pandas as pd

data = pd.DataFrame({'one': [1, 2, 3],
                     'two': [10, 20, 30],
                     'three': [100, 200, 300]})
print(data)

user_input = int(input("値を入力してください: "))
if user_input % 3 == 0 and user_input % 5 == 0:
    print(data.shift(periods=1, axis=1, fill_value=user_input))
else:
    print(data.shift(periods=1, axis=1))

実行結果

出力例1:15を入力した場合(3と5の両方で割り切れる)

 one two three
0 1   10  100
1 2   20  200
2 3   30  300
値を入力してください: 15
 one two three
0 15  1   10
1 15  2   20
2 15  3   30

15は3×5であるため条件を満たし、fill_value=15が適用されて先頭列の欠損部分が15で埋められます。

出力例2:3を入力した場合(5では割り切れない)

 one two three
0 1   10  100
1 2   20  200
2 3   30  300
値を入力してください: 3
 one two three
0 NaN  1.0  10.0
1 NaN  2.0  20.0
2 NaN  3.0  30.0

3は5で割り切れないため条件を満たさず、fill_valueを指定しない通常のシフトが実行されます。その結果、先頭列にはNaNが残ります。

ポイント解説

  • axis=1:シフトする方向を指定します。axis=1(またはaxis='columns')を指定すると行ごとに横方向へシフトします。デフォルトのaxis=0では縦方向にシフトします。
  • periods=1:シフトする幅です。ここでは各値を1つずつずらしています。
  • fill_value:シフトで新たに空いたセルに入れる値を指定できます。省略した場合はNaNになります。
  • データ型の変化に注意:fill_valueを指定しない場合、NaNが混ざることで整数列がfloat型(1.0、10.0など)として表示される点に留意しましょう。
  1. Python Pandas – 順序付きCategoricalIndexから最小値を取得する方法

    Pandasで順序付きCategoricalIndex(カテゴリカルインデックス)の最小値を取得するには、catIndex.min()メソッドを使用します。この記事では、実際のコード例とともに、手順をわかりやすく解説していきます。1. ライブラリのインポートまずは、必要なライブラリをインポートしましょう。import pandas as pd2. 順序付きCategoricalIndexの作成次に、「categories」パラメータを使ってカテゴリを設定し、「ordered」パラメータにTrueを指定することで、カテゴリカルデータを順序付きとして扱います。ここでは「p」「q」「r」「s」という

  2. Python Tkinterでチェックボックスの入力値を取得する方法

    チェックボックスウィジェットは、「オン(True)」と「オフ(False)」の2つの状態を持つ入力ウィジェットです。設定の有効・無効の切り替えや、利用規約への同意確認など、特定の値を検証したい場面で幅広く活用されています。ここでは、チェックボックスが選択されたときに、その選択状態(入力値)を取得して出力する方法を紹介します。Tkinterでチェックボックスの値を取得するには、get()メソッドを使用します。このメソッドは、チェックボックスに関連付けられた変数の現在の値を返します。サンプルコード# Tkinterライブラリをインポート from tkinter import * # tkint