質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

227閲覧

Pythonでfor文を利用して10行間隔でコラムに文字を入れていきたい。

Danrussia

総合スコア44

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/04/19 06:38

前提・実現したいこと

横6列,縦100列のデータセットがあります。
列["X"]の最小値から10行刻みで、列["X coordinate"]に数字を割り振っていきたい
と思っています。
(例:データ1番目(行)から10番目(行)までは "1",1120までは"2" 2030までは3....)
(下記の「完成させたいデータセット」のようなイメージです)
便宜的に列[X Cordinate]を追加しましたが、コードを書く上で邪魔でしたらdropなどで削除して貰っても大丈夫です。

該当のデータセット

|Label|X|Y|Sumple|Bean Number|X coordinate|
|:--|:--: |--:|
|img061c.jpg|886|3400|くるみ豆|B2|0|
|img061c.jpg|899|1730|くるみ豆|B2|0|
|img061c.jpg|912|2760|くるみ豆|B2|0|
|img061c.jpg|917|4070|くるみ豆|B2|0|
|img061c.jpg|920|4750|くるみ豆|B2|0|
|img061c.jpg|932|4440|くるみ豆|B2|0|
|img061c.jpg|939|2100|くるみ豆|B2|0|
|img061c.jpg|943|3690|くるみ豆|B2|0|
|img061c.jpg|947|3070|くるみ豆|B2|0|
|img061c.jpg|956|2410|くるみ豆|B2|0|
|...||||||
|img061c.jpg|3870|4810|くるみ豆|B2|0|
|img061c.jpg|3870|3430|くるみ豆|B2|0|
|img061c.jpg|3880|4090|くるみ豆|B2|0|
|img061c.jpg|3880|3120|くるみ豆|B2|0|
|img061c.jpg|3890|4450|くるみ豆|B2|0|
|img061c.jpg|3900|2460|くるみ豆|B2|0|
|img061c.jpg|3900|2760|くるみ豆|B2|0|
|img061c.jpg|3900|2120|くるみ豆|B2|0|
|img061c.jpg|3910|3810|くるみ豆|B2|0|
|img061c.jpg|3910|1770|くるみ豆|B2|0|
|100 rows ×|6columns|

完成させたいデータセット

|Label|X|Y|Sumple|Bean Number|X coordinate|
|:--|:--: |--:|
|img061c.jpg|886|3400|くるみ豆|B2|1|
|img061c.jpg|899|1730|くるみ豆|B2|1|
|img061c.jpg|912|2760|くるみ豆|B2|1|
|img061c.jpg|917|4070|くるみ豆|B2|1|
|img061c.jpg|920|4750|くるみ豆|B2|1|
|img061c.jpg|932|4440|くるみ豆|B2|1|
|img061c.jpg|939|2100|くるみ豆|B2|1|
|img061c.jpg|943|3690|くるみ豆|B2|1|
|img061c.jpg|947|3070|くるみ豆|B2|1|
|img061c.jpg|956|2410|くるみ豆|B2|1|
|...||||||
|img061c.jpg|3870|4810|くるみ豆|B2|10|
|img061c.jpg|3870|3430|くるみ豆|B2|10|
|img061c.jpg|3880|4090|くるみ豆|B2|10|
|img061c.jpg|3880|3120|くるみ豆|B2|10|
|img061c.jpg|3890|4450|くるみ豆|B2|10|
|img061c.jpg|3900|2460|くるみ豆|B2|10|
|img061c.jpg|3900|2760|くるみ豆|B2|10|
|img061c.jpg|3900|2120|くるみ豆|B2|10|
|img061c.jpg|3910|3810|くるみ豆|B2|10|
|img061c.jpg|3910|1770|くるみ豆|B2|10|
|100 rows ×|6columns|

該当のソースコード

Python3

1import os 2import pandas as pd 3import numpy as np 4 5os.chdir("C:\Users\For Programming\Documents\Python Scripts") 6df1 = pd.read_csv('img061cNew.csv', encoding="shift-jis") 7df1['X coordinate'] = int() 8B=(df1["X"].min().astype(float)) 9df1['X coordinate'] = int() 10df1.sort_values(by='X')

試したこと

最初期の実現の構想としては、Xの列(カラム)においてMax値とMin値を求め、
(Max-Min)/10で出てきた値を適当な変数"variable"などと置いて

if文を使い「もしXの値が0≦該当の値≦Xのmin値ならX coordinateに"1"、もし違う場合は
Xのmin値≦該当の値≦(Xのmin値)+variable ならX coordinateに"2"、

というようなプログラムを考えていました。(Xの値が10行を境に少しずつ増えるので...)
プログラムのコードが複雑になって、明らかに自分のキャパを超えてしまうので、現在質問させて頂いたようなコードの書き方を質問させて頂きました。

補足情報(FW/ツールのバージョンなど)

Anaconda
Python
Jupyter notebook

お忙しいとは思いますが、よろしくお願いいたします。
情報に不足がありましたら、ご指摘お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

対象のデータフレームが 『X列は既に昇順に並んでおり、indexは0番から順に振られている』という前提であれば、can110さんの方法と同様に indexを使って算出するのが良いかと思います。これは単に index値を10で割り、1を足すと良いので

Python

1df['X coordinate'] = (df.index // 10) + 1

となります。結果を"文字列" で得たいのであればastype()を使って

Python

1df['X coordinate'] = ((df.index // 10) + 1).astype(str)

です。

X列が昇順に並んでないのであれば Series.rank() を使うと良いかと思います。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rank.html

rank() は データを昇順に1から順に番号を振るメソッドです。あとはこれに 9 を足して10で割ると目的の値が得られるかと思います。

Python

1df['X coordinate'] = (((df['X'].rank(method='first') + 9) // 10)).astype(int)

投稿2019/04/19 07:54

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

.applyで行毎にインデックス番号 / 10 + 1 を割り当てるとよいと思います。

Python

1import pandas as pd 2 3df = pd.DataFrame({'Label':list(range(100))}) 4 5# 行毎にインデックス番号 / 10 + 1 を割り当てる 6df['xc'] = df.apply( lambda r: str(r.index // 10 + 1), axis=0) 7print(df) 8 9""" 10 Label xc 110 0 1 121 1 1 132 2 1 143 3 1 154 4 1 165 5 1 176 6 1 187 7 1 198 8 1 209 9 1 2110 10 2 22 : 2397 97 10 2498 98 10 2599 99 10 26 27[100 rows x 2 columns] 28"""

投稿2019/04/19 06:55

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Danrussia

2019/04/20 09:58

回答が遅くなり申し訳ありません。can110さんの方法で問題解決する事ができました。 パッケージを使わないシンプルな方法でありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問