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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

16049閲覧

pandasで行を複製し縦に連結

kak

総合スコア27

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/04/12 00:41

編集2019/04/12 02:04

いつも勉強させていただいてます。
AnacondaでPython2.7と3を使い分けています。
pandasのデータフレームで以下のようなものがあります。

In [45]: df_names.T Out[45]: 1 ./complex.2_P.pdb 2 ./complex.9_P.pdb 3 ./complex.7_P.pdb 4 ./complex.6_P.pdb 5 ./complex.5_P.pdb 6 ./complex.8_P.pdb 7 ./complex.4_P.pdb 8 ./complex.3_P.pdb 9 complex.10_P.pdb 10 complex.1-2_P.pdb 11 complex.2_P.pdb 12 complex.3_P.pdb 13 complex.4_P.pdb 14 complex.5_P.pdb 15 complex.6_P.pdb 16 complex.7_P.pdb 17 complex.7_P_P.pdb 18 complex.8_P.pdb 19 complex.9_P.pdb 20 complex.lig2_P.pdb Name: 0, dtype: object

これを各行5個ずつに複製し、以下の様にカラム1に縦に連結していきたいと考えています。

0 ./complex.2_P.pdb 1 ./complex.2_P.pdb 2 ./complex.2_P.pdb 3 ./complex.2_P.pdb 4 ./complex.2_P.pdb 5 ./complex.9_P.pdb 6 ./complex.9_P.pdb 7 ./complex.9_P.pdb 8 ./complex.9_P.pdb 9 ./complex.9_P.pdb 10 ... 11 ...

そこでまず、行列を入れ替えて5行以上にしたものを作成し、カラム1~20までを5行ずつ取り出し、カラム1に縦積みしてこうとしたのですが、range指定した範囲の最後の2行しか出力されませんでした。(range(19)にすると最後の2行、range(3)では最初の2行といった形)
解決方法を教えてください。また、ほかに簡便な方法があればお願いします。

In [46]: df_names.T Out[46]: 1 2 ... 19 20 0 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 1 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 2 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 3 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 4 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 5 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 6 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 7 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 8 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 9 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb 10 ./complex.2_P.pdb ./complex.9_P.pdb ... complex.9_P.pdb complex.lig2_P.pdb

以下出力です。
(下書きだとcomplex.8とcomplex.9になっていますが、本文だと消えているように見えます。)

In [52]: for i in range(19): ...: if i % 2 == 1: ...: df_n=df_names ...: df_n=df_n.iloc[1:6,i].append(df_n.iloc[1:6,i+1],ignore_index=True) ...: else: ...: continue ...: df_n ...: Out[52]: 0 complex.8_P.pdb 1 complex.8_P.pdb 2 complex.8_P.pdb 3 complex.8_P.pdb 4 complex.8_P.pdb 5 complex.9_P.pdb 6 complex.9_P.pdb 7 complex.9_P.pdb 8 complex.9_P.pdb 9 complex.9_P.pdb dtype: object

以下の様に実行できました。

In [58]: data_list Out[58]: ['./complex.2_P.pdb', './complex.9_P.pdb', './complex.7_P.pdb', './complex.6_P.pdb', './complex.5_P.pdb', './complex.8_P.pdb', './complex.4_P.pdb', './complex.3_P.pdb', 'complex.10_P.pdb', 'complex.1-2_P.pdb', 'complex.2_P.pdb', 'complex.3_P.pdb', 'complex.4_P.pdb', 'complex.5_P.pdb', 'complex.6_P.pdb', 'complex.7_P.pdb', 'complex.7_P_P.pdb', 'complex.8_P.pdb', 'complex.9_P.pdb', 'complex.lig2_P.pdb', './complex.9_P.pdb'] In [60]: ret=pd.concat([data]*5,1).stack().reset_index(drop=True) In [61]: ret Out[61]: 0 ./complex.2_P.pdb 1 ./complex.2_P.pdb 2 ./complex.2_P.pdb 3 ./complex.2_P.pdb 4 ./complex.2_P.pdb 5 ./complex.9_P.pdb 6 ./complex.9_P.pdb 7 ./complex.9_P.pdb 8 ./complex.9_P.pdb 9 ./complex.9_P.pdb 10 ./complex.7_P.pdb 11 ./complex.7_P.pdb 12 ./complex.7_P.pdb 13 ./complex.7_P.pdb 14 ./complex.7_P.pdb 15 ./complex.6_P.pdb 16 ./complex.6_P.pdb 17 ./complex.6_P.pdb 18 ./complex.6_P.pdb 19 ./complex.6_P.pdb 20 ./complex.5_P.pdb 21 ./complex.5_P.pdb 22 ./complex.5_P.pdb 23 ./complex.5_P.pdb 24 ./complex.5_P.pdb 25 ./complex.8_P.pdb 26 ./complex.8_P.pdb 27 ./complex.8_P.pdb 28 ./complex.8_P.pdb 29 ./complex.8_P.pdb ... 75 complex.7_P.pdb 76 complex.7_P.pdb 77 complex.7_P.pdb 78 complex.7_P.pdb 79 complex.7_P.pdb 80 complex.7_P_P.pdb 81 complex.7_P_P.pdb 82 complex.7_P_P.pdb 83 complex.7_P_P.pdb 84 complex.7_P_P.pdb 85 complex.8_P.pdb 86 complex.8_P.pdb 87 complex.8_P.pdb 88 complex.8_P.pdb 89 complex.8_P.pdb 90 complex.9_P.pdb 91 complex.9_P.pdb 92 complex.9_P.pdb 93 complex.9_P.pdb 94 complex.9_P.pdb 95 complex.lig2_P.pdb 96 complex.lig2_P.pdb 97 complex.lig2_P.pdb 98 complex.lig2_P.pdb 99 complex.lig2_P.pdb 100 ./complex.9_P.pdb 101 ./complex.9_P.pdb 102 ./complex.9_P.pdb 103 ./complex.9_P.pdb 104 ./complex.9_P.pdb Length: 105, dtype: object In [62]: ret=pd.concat([data]*5).sort_index().reset_index(drop=True) In [63]: ret Out[63]: 0 ./complex.9_P.pdb 1 ./complex.9_P.pdb 2 ./complex.9_P.pdb 3 ./complex.9_P.pdb 4 ./complex.9_P.pdb 5 ./complex.2_P.pdb 6 ./complex.2_P.pdb 7 ./complex.2_P.pdb 8 ./complex.2_P.pdb 9 ./complex.2_P.pdb 10 complex.1-2_P.pdb 11 complex.1-2_P.pdb 12 complex.1-2_P.pdb 13 complex.1-2_P.pdb 14 complex.1-2_P.pdb 15 complex.2_P.pdb 16 complex.2_P.pdb 17 complex.2_P.pdb 18 complex.2_P.pdb 19 complex.2_P.pdb 20 complex.3_P.pdb 21 complex.3_P.pdb 22 complex.3_P.pdb 23 complex.3_P.pdb 24 complex.3_P.pdb 25 complex.4_P.pdb 26 complex.4_P.pdb 27 complex.4_P.pdb 28 complex.4_P.pdb 29 complex.4_P.pdb ... 75 ./complex.6_P.pdb 76 ./complex.6_P.pdb 77 ./complex.6_P.pdb 78 ./complex.6_P.pdb 79 ./complex.6_P.pdb 80 ./complex.5_P.pdb 81 ./complex.5_P.pdb 82 ./complex.5_P.pdb 83 ./complex.5_P.pdb 84 ./complex.5_P.pdb 85 ./complex.8_P.pdb 86 ./complex.8_P.pdb 87 ./complex.8_P.pdb 88 ./complex.8_P.pdb 89 ./complex.8_P.pdb 90 ./complex.4_P.pdb 91 ./complex.4_P.pdb 92 ./complex.4_P.pdb 93 ./complex.4_P.pdb 94 ./complex.4_P.pdb 95 ./complex.3_P.pdb 96 ./complex.3_P.pdb 97 ./complex.3_P.pdb 98 ./complex.3_P.pdb 99 ./complex.3_P.pdb 100 complex.10_P.pdb 101 complex.10_P.pdb 102 complex.10_P.pdb 103 complex.10_P.pdb 104 complex.10_P.pdb Name: 0, Length: 105, dtype: object

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

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

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

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

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

guest

回答2

0

単純に複製したいだけならappendを使用するのはいかがでしょうか?

python

1import pandas as pd 2 3df = pd.DataFrame([[1, 'A'], 4 [2, 'B'], 5 [3, 'C']], columns=['num', 'alp']) 6 7print('実行前') 8print(df) 9 10df = df.append(df) # 複製したい行数だけ繰り返す 11df = df.sort_index() 12 13print('実行後') 14print(df)

出力は以下のようになるはずかと。

実行前 num alp 0 1 A 1 2 B 2 3 C 実行後 num alp 0 1 A 0 1 A 1 2 B 1 2 B 2 3 C 2 3 C

投稿2019/04/12 01:01

corutopi

総合スコア20

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

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

kak

2019/04/12 02:10

ありがとうございます。DataFrameと複製数を色々と組み合わせて使いたかったのでmagichan様をベストアンサーにさせていただきました。実行前と実行後でPrintすると教科書的で分かりやすいですね。勉強になりました。
kak

2019/04/12 02:13

>omxin様 入れ違いにコメントしてしまいました。情報提供ありがとうございます。図が分かりやすいですね。該当サイトを読んでいたのですが自分の応用力がありませんでした。
guest

0

ベストアンサー

とりあえず2通りほど。

Python

1import pandas as pd 2 3data = pd.Series(list('ABCDEFG')) 4 5#横結合した後にstackする方法 6ret = pd.concat([data] * 5, 1).stack().reset_index(drop=True) 7 8 9#横結合した後にsortする方法 10ret = pd.concat([data] * 5).sort_index().reset_index(drop=True)

投稿2019/04/12 01:39

magichan

総合スコア15898

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

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

kak

2019/04/12 02:07

ありがとうございます。リスト化して5倍するのが肝だったんですね。stackの方がリストの順番が保たれていたので、そちらを使おうと思います。順番が変わる違いについては今後勉強していこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問