実現したいこと
test2.csvは以下のようなファイルです。
t x y 0 10 20 1 11 21 2 12 22 3 13 23
今、t≦1のときz=x、t>1のときz=y、と定義したzの値をyの右側に加えたいです。
つまり、欲しい結果は以下の通りです。
t x y z 0 10 20 10 1 11 21 11 2 12 22 22 3 13 23 23
「該当のソースコード」ではエラーが出てしまいました。どなたかコードを直してください。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "〇〇〇\testCV659teratail2.py", line 5, in <module> df['z'] = [(b if df['t'] > 1 else a) for a, b in zip(df['x'], df['y'])] ^^^^^^^^^^^ File "〇〇〇\site-packages\pandas\core\generic.py", line 1580, in __nonzero__ raise ValueError( ...<2 lines>... ) ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
該当のソースコード
python
1import pandas as pd 2 3df = pd.read_csv('test2.csv') 4 5df['z'] = [(b if df['t'] > 1 else a) for a, b in zip(df['x'], df['y'])] 6 7print(df)
試したこと
zip関数に慣れていなくて、よく分かりませんでした。
googleのAIによる下記のコードを参考にしました。
python
1list_a = [0, 1, 2, 3] 2list_b = [10, 20, 30, 40] 3 4# t (a) > 1 なら b*2、そうでなければ b のままにする 5result = [(a, b * 2 if a > 1 else b) for a, b in zip(list_a, list_b)] 6 7print(result) 8# 出力: [(0, 10), (1, 20), (2, 60), (3, 80)]
回答3件
あなたの回答
tips
プレビュー
2026/02/12 01:03
2026/02/12 07:19
2026/02/13 00:52