tugutugu
@tugutugu (tugu tugu)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

python 2つのリストを比較して一致した場合の処理について

解決したいこと

pythonで事務作業の効率化をしたいと考えています。
2つのリストを比較して、一致している場合に1つのリストの数量を出力したいと考えております。

発生している問題

#1つ目のリスト
df_concat_sum = df_concat[['品番' , '数量']].groupby('品番',as_index=False).sum()


#2つ目のリスト
p_numbers= []
for cell in ws['C']:
    p_numbers.append(cell.value)

1つ目のリストの品番と2つ目のリストが一致している場合、1つ目のリストの数量を出力したいと考えております。
また、出力結果を2つ目のリストの並び順(数量がなくても商品コードを出力したい。)
アドバイスをいただけましたら幸いです!

0

2Answer

回答者コメントの方だと字下げが無く見辛かったため、改めて修正後のコードをこちらに記載します。

#1つ目のリストの品番をList型に変換
df_concat_sum_p_numbers = df_concat_sum["品番"].to_list()

# 1つ目のリストの品番と2つ目のリストが一致している場合、1つ目のリストの数量を出力
# ただし、出力結果は2つ目のリストの並び順
for p_num in p_numbers:
    if p_num in df_concat_sum_p_numbers:
        total = int(df_concat_sum[df_concat_sum['品番'] == p_num]['数量'])
        print('{}:{}'.format(p_num, total))
    else:
        print('{}:0'.format(p_num))
1Like

コメント失礼します。

以下を追記することで望む結果になりますでしょうか?
もし誤ってたら申し訳ないです。

#1つ目のリストの品番をList型に変換
df_concat_sum_p_numbers = df_concat_sum["品番"].to_list()

# 1つ目のリストの品番と2つ目のリストが一致している場合、1つ目のリストの数量を出力
# ただし、出力結果は2つ目のリストの並び順
for p_num in p_numbers:
    if p_num in df_concat_sum_p_numbers:
        total = int(df_concat_sum[df_concat_sum['品番'] == p_num]['数量'])
        print('{}:{}'.format(p_num, total))
0Like

Comments

  1. @tugutugu

    Questioner


    @Ko_Miya様

    ご連絡ありがとうございます。
    ほぼ合っておりますが、出力結果が、2つ目のリストの並び順、数量がなくても商品コードを出力したいと考えております。

    2つ目のリストを固定で、数量を出力することは可能でしょうか?

  2. ご連絡ありがとうございます。

    2つ目のリストをforで回しているので、私としては2つ目のリストの並び順、数量がなくても商品コードを出力しているつもりです。

    お手数ですが、入力(1つ目のリストと2つ目のリスト)とその際に期待される結果を詳細にご教示頂けますでしょうか?

    ちなみに、私は以下のようにイメージしております。
    ★入力
    [1つ目のリスト]
    df_concat
    品番,数量,列X,...
    11111,2,xx,...
    22222,1,xx,...
    33333,0,xx,...
    22222,2,xx,...
    44444,5,xx,...

    df_concat_sum
    品番,数量
    11111,2
    22222,3
    33333,0
    44444,5
    [2つ目のリスト]
    33333,
    11111,
    22222,

    ★期待される結果
    33333:0
    11111:2
    22222:3
  3. @tugutugu

    Questioner

    @Ko_Miya様

    ご連絡ありがとうございます。
    @Ko_Miya様のコードを試したところ、
    1つ目のリストで数量がある品番のみ出力の結果になりました。

    期待される結果について記載いたします。
    ご教示いただけますと幸いです!

    [1つ目のリスト]
    df_concat
    品番,数量,列X,...
    11111,2,xx,...
    22222,1,xx,...
    33333,0,xx,...
    22222,2,xx,...
    44444,5,xx,...

    df_concat_sum
    品番,数量
    11111,2
    22222,3
    33333,0
    44444,5
    [2つ目のリスト]
    33333,
    55555,
    11111,
    22222,
    44444,
    66666,
    77777,

    ★期待される結果
    33333:0
    55555,0
    11111:2
    22222:3
    44444,5
    66666,0
    77777,0

    2つ目のリストには、1つ目のリストに入ってない品番があります。
    それらを表示できれば幸いです!
    よろしくお願いいたします。
  4. ご連絡ありがとうございます。

    > 2つ目のリストには、1つ目のリストに入ってない品番があります。
    そういうことでしたか!
    でしたら、私が載せたコードのif文の部分を以下に置き換えて頂けますでしょうか?
    ```
    if p_num in df_concat_sum_p_numbers:
    total = int(df_concat_sum[df_concat_sum['品番'] == p_num]['数量'])
    print('{}:{}'.format(p_num, total))
    else: # 追加
    print('{}:0'.format(p_num)) # 追加
    ```
  5. @tugutugu

    Questioner

    @Ko_Miya様

    ご連絡ありがとうございます!!
    説明不足ですみません!
    おかげさまで解決いたしました!
    本当にありがとうございます。
  6. ご連絡ありがとうございます。
    解決してよかったです!

Your answer might help someone💌