10行3列のDataFrameがあったとします。
カラム名をA,B,Cとします。
C列のある行(3行とする)の値が、B列のある行(8行とする)の値と同じだったとき、A列の8行の値をD列の3行へ追加する、という感じのプログラムを考えております。
ちなみに、C列の最初から最後まで実行しますので、実際には1行目へ追加される形となります。
dfをDataFrameとして、
value_a = df["A"].value value_c = df["C"].value value_b = df["B"].value value_d=[] m = 0 for value1 in value_c: for value2 in value_b: if value1 ==value2: d = value_a[m] value_d.append(d) break m= m + 1 if d == "": value_d.append("N")
最終的に、このvalue_dを追加して、10行4列のDataFrameとしたいですが、
上記コードよりもっと簡潔なコードはないでしょうか。
宜しくお願いします。
ある特定の1列において等しい行が3行以上あった場合の処理はどうしますか?
すみません、先ほどのコード間違えておりました。再度修正いたしました。
3行あった場合でも、3行とも同じになるはずですので、最初に見つけた行、もしくは若い行でお願いします。
ID(A列) 名前(B列) 好きな人(C列)
1 斎藤 北村
2 北村 斎藤
3 小林 北村
こんなDFがあった場合、
ID(A列) 名前(B列) 好きな人(C列) 好かれてる人(D列)
1 斎藤 北村 2
2 北村 斎藤 1,3
3 小林 北村
A列の値を追加するので、比較する物はまったく同じ物ですが、D列に入ってくる内容(その行の実態)はまったく異なるので、重複しますが、本当に若い行だけで良いのですか?
ありがとうございます。A列とB列はリンクしており、絶対にB列がある値だったらA列もある値をとります。
ID(A列) 名前(B列) 好きな人(C列) 好かれてる人(D列)
1 斎藤 北村 2
2 北村 斎藤 1
3 小林 北村 N
A列とB列はリンクするように集計するため、
B列に同じものが複数あろうがA列はつねに同じものしかこないです。
私のコードを見ていただければお分かりなられるかと思いますが、D列はかならず、1行目から追加され、歯抜けはありません。私のコード以外にないでしょうか。
Pandasのデータフレームの参照能力の実力を知りたいためです。
回答1件
あなたの回答
tips
プレビュー