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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

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

Q&A

解決済

1回答

735閲覧

pandasで各行を指定回数複製する方法

beginner.py

総合スコア8

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

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

0グッド

0クリップ

投稿2020/06/09 01:50

編集2020/06/09 01:51

皆様、お世話になっております。
閲覧いただき、ありがとうございます。

pandasで以下を実現したいのですが、やり方が全く分からず、がめついかと思いますが、質問させてください。

スプレッドシートの情報として以下をデータフレームとして読み込んでおりまして

大分類中分類小分類
Aa1
Bb2
Cc3
D

上記データフレームの各列を以下の内容に書き換えたいというのが今回のご相談です

大分類中分類小分類
Aa1
Ab1
Ac1
Aa2
Ab2
Ac2
Aa3
Ab3
Ac3
Ba1
Bb1
Bc1
Ba2
Bb2
Bc2
Ba3
Bb3
Bc3
Bc3
Ca1
Cb1
Cc1
Ca2
Cb2
Cc2
Ca3
Cb3
Cc3
Cc3
Da1
Db1
Dc1
Da2
Db2
Dc2
Da3
Db3
Dc3

・大分類は1文字ごとに9回繰り返し+ABCD計4周させる
・中分類は大分類1文字にたいしてabcの順番で3回繰り返す
・小分類は大分類1文字にたいして111222333の順番で3回繰り返す

最終的にはできたデータフレームをそのまま別のスプレッドシートに張り付けられたらいいなと考えております。
for i in range()とpd.concat()を組み合わせて使うのかなというイメージはわかったのですが、
各列で別々の処理を行う方法が見当もつかず・・・・

大変お忙しいところ恐縮ですが、ご回答いただければ幸いでございます。
どうぞ、よろしくおねがいいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

itertools.product() を使うと良いのではないでしょうか

Python

1import pandas as pd 2import numpy as np 3from itertools import product 4 5df = pd.DataFrame({ 6 '大分類': ['A','B','C','D'], 7 '中分類': ['a','b','c',np.nan], 8 '小分類': ['1','2','3',np.nan], 9}) 10ret = pd.DataFrame(product(df['大分類'].dropna(), 11 df['中分類'].dropna(), 12 df['小分類'].dropna()), 13 columns=df.columns) 14print(ret) 15# 大分類 中分類 小分類 16#0 A a 1 17#1 A a 2 18#2 A a 3 19#3 A b 1 20#4 A b 2 21#5 A b 3 22#6 A c 1 23#7 A c 2 24#8 A c 3 25#9 B a 1 26#10 B a 2 27#11 B a 3 28#12 B b 1 29#13 B b 2 30#14 B b 3 31#15 B c 1 32#16 B c 2 33#17 B c 3 34#18 C a 1 35#19 C a 2 36#20 C a 3 37#21 C b 1 38#22 C b 2 39#23 C b 3 40#24 C c 1 41#25 C c 2 42#26 C c 3 43#27 D a 1 44#28 D a 2 45#29 D a 3 46#30 D b 1 47#31 D b 2 48#32 D b 3 49#33 D c 1 50#34 D c 2 51#35 D c 3

【追記】

質問と同じ並びにするには

Python

1ret = pd.DataFrame(product(df['大分類'].dropna(), 2 df['小分類'].dropna(), 3 df['中分類'].dropna()), 4 columns=['大分類','小分類','中分類']).reindex(df.columns, axis=1)

ですね

投稿2020/06/09 02:06

編集2020/06/09 02:13
magichan

総合スコア15898

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

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

magichan

2020/06/09 02:07

インクリメントする順番は「中分類」「小分類」「大分類」の順なのですね。。投稿してから気が付きました。 あとで修正します。
magichan

2020/06/09 02:13

追記しました
beginner.py

2020/06/09 03:47

magichan様 ご回答いただき、ありがとうございます。 やりたいことが100%実現できました。お忙しいなか、本当に助かりました。ありがとうございました;;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問