特定の列の数値に基づいてパンダのデータフレームを分解する方法

ジャスティンCR

列の数値に基づいて既存のデータフレームを分解しようとしています。たとえば、列の数値が3の場合、これらの行を3つにしたい、というように続きます。

このデータフレームから始めると仮定します。

inventory_partner inventory_partner2  calc
0              A1                 aa     1
1              A2                 bb     2
2              A3                 cc     5
3              A4                 dd     4
4              A5                 ee     5
5              A6                 ff     3

このデータフレームに到達するにはどうすればよいですか?

  inventory_partner inventory_partner2  calc
0                A1                 aa     1
1                A2                 bb     2
1                A2                 bb     2
2                A3                 cc     5
2                A3                 cc     5
2                A3                 cc     5
2                A3                 cc     5
2                A3                 cc     5
3                A4                 dd     4
3                A4                 dd     4
3                A4                 dd     4
3                A4                 dd     4
4                A5                 ee     5
4                A5                 ee     5
4                A5                 ee     5
4                A5                 ee     5
4                A5                 ee     5
5                A6                 ff     3
5                A6                 ff     3
5                A6                 ff     3

以下のコードを使用してこれを機能させることができましたが、explodeメソッドにフィードするためにコンマ区切りのリストを手動で作成しなくても、これを実現する簡単な方法があるかどうか疑問に思いました。

import pandas as pd

#create dataframe
d = {'inventory_partner': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'], 'inventory_partner2': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff'], 'calc': [1, 2, 5, 4, 5, 3]}
df1 = pd.DataFrame(data=d)

print(df1) #print original dataframe

#create my_comma_list column based on number values in calc column
df1.insert(3, 'my_comma_list', '')
df1.loc[df1['calc'] == 1, 'my_comma_list'] = '1'
df1.loc[df1['calc'] == 2, 'my_comma_list'] = '1, 2'
df1.loc[df1['calc'] == 3, 'my_comma_list'] = '1, 2, 3'
df1.loc[df1['calc'] == 4, 'my_comma_list'] = '1, 2, 3, 4'
df1.loc[df1['calc'] == 5, 'my_comma_list'] = '1, 2, 3, 4, 5'

print(df1) #print before row explosion

#explode the rows using the my_comma_list column to get desired number of rows
df1 = df1.assign(my_comma_list=df1['my_comma_list'].str.split(',')).explode('my_comma_list')
#drop the my_comma_list column since we no longer need it
del df1['my_comma_list']

print(df1) #print after row explosion
ジョー・フェルンズ

Index.repeatとDataFrame.locを使用して行を繰り返すことができます。

import pandas as pd

#create dataframe
d = {'inventory_partner': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
     'inventory_partner2': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff'],
     'calc': [1, 2, 5, 4, 5, 3]}
df1 = pd.DataFrame(data=d)
print (df1)
df1 = df1.loc[df1.index.repeat(df1['calc'])]
print (df1)

出力は次のとおりです。

元のDataFrame:

  inventory_partner inventory_partner2  calc
0                A1                 aa     1
1                A2                 bb     2
2                A3                 cc     5
3                A4                 dd     4
4                A5                 ee     5
5                A6                 ff     3

繰り返される行でDataFrameを更新しました:

  inventory_partner inventory_partner2  calc
0                A1                 aa     1
1                A2                 bb     2
1                A2                 bb     2
2                A3                 cc     5
2                A3                 cc     5
2                A3                 cc     5
2                A3                 cc     5
2                A3                 cc     5
3                A4                 dd     4
3                A4                 dd     4
3                A4                 dd     4
3                A4                 dd     4
4                A5                 ee     5
4                A5                 ee     5
4                A5                 ee     5
4                A5                 ee     5
4                A5                 ee     5
5                A6                 ff     3
5                A6                 ff     3
5                A6                 ff     3

参照ルックアップを使用して列の値に基づいて行を繰り返す場合は、ディクショナリを作成し、それを繰り返す回数を特定してから、mapを使用して値を渡すことができます。

たとえば、の値に基づいて繰り返したいとしinventory_partnerます。次に、これを行うことができます:

import pandas as pd

inv_partner_dict = {'A1':1, 'A2':2, 'A3':5, 'A4':4,'A5':5,'A6':3}

#create dataframe
d = {'inventory_partner': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
     'inventory_partner2': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff'],
     'calc': [1, 2, 5, 4, 5, 3]}
df1 = pd.DataFrame(data=d)


print (df1)
df1 = df1.loc[df1.index.repeat(df1['inventory_partner2'].map(inv_partner_dict))]
print (df1)

これは同じことをします。

これの出力は次のようになります。

元のDataFrame:

  inventory_partner inventory_partner2  calc
0                A1                 aa     1
1                A2                 bb     2
2                A3                 cc     5
3                A4                 dd     4
4                A5                 ee     5
5                A6                 ff     3

繰り返される行でDataFrameを更新しました:

  inventory_partner inventory_partner2  calc
0                A1                 aa     1
1                A2                 bb     2
1                A2                 bb     2
2                A3                 cc     5
2                A3                 cc     5
2                A3                 cc     5
2                A3                 cc     5
2                A3                 cc     5
3                A4                 dd     4
3                A4                 dd     4
3                A4                 dd     4
3                A4                 dd     4
4                A5                 ee     5
4                A5                 ee     5
4                A5                 ee     5
4                A5                 ee     5
4                A5                 ee     5
5                A6                 ff     3
5                A6                 ff     3
5                A6                 ff     3

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

特定の列の値に基づいてパンダデータフレームの値を変更する

分類Dev

パンダデータフレームの特定のIDに基づいて列の値を変更する

分類Dev

列の値の違いに基づいてパンダのデータフレームを分割する方法

分類Dev

他の行の値に基づいてパンダのデータフレーム列を追加する方法

分類Dev

パンダデータフレームの複数の列値に基づいて行を選択する

分類Dev

同じパンダデータフレームの列の値に基づいて行を複製する方法

分類Dev

年に基づいてパンダデータフレームに複数の列を作成する方法

分類Dev

含まれているテキスト値に基づいてパンダのデータフレーム列を複数の列に分割する方法

分類Dev

特定の条件に基づいてパンダデータフレームの特定の列の特定の値を置き換える方法は?

分類Dev

特定の列の値に基づいて2つのデータフレームを比較し、パンダでそれらを削除する方法

分類Dev

別の列の値に基づいてパンダデータフレームに列を追加する

分類Dev

列の値に基づいて複数のパンダデータフレームを作成します

分類Dev

他の列の条件に基づいてパンダのデータフレーム列を操作する方法

分類Dev

パンダ:特定の列の文字列値に基づいて、データフレームを個別のデータフレームに分割します

分類Dev

列の値に基づいてパンダデータフレームの行にnanを設定する

分類Dev

パンダは、すべての行の値に基づいてデータフレームに新しい列を追加する方法、データフレーム全体に適用される特定の列の値

分類Dev

列の値に基づいてパンダのデータフレームを結合する

分類Dev

行の平均値に基づいてパンダデータフレームの列を除外する

分類Dev

他の列の値に基づいてパンダデータフレーム行を作成する

分類Dev

Python-パンダ-データフレーム-条件に基づいて単一の列を複数のブール列に分解します

分類Dev

パンダの列に基づいて2つのデータフレームをマージする方法

分類Dev

別の列パンダデータフレームに基づいて列値を抽出する

分類Dev

列の値に基づいてデータフレーム列を転置する-パンダ

分類Dev

パンダ-データフレームの複数の条件に基づいて列を操作する

分類Dev

パンダのデータフレームの別の列の値に基づいて列を追加します

分類Dev

1つ以上の列に基づいてパンダデータフレームに値を追加/挿入する

分類Dev

パンダの2番目のデータフレームの列値に基づいて1つのデータフレームから列を削除する

分類Dev

データフレーム内の他の列に基づいてパンダのデータフレーム列の値を変更する

分類Dev

文字列のリストに基づいてパンダデータフレームから値を抽出する

Related 関連記事

  1. 1

    特定の列の値に基づいてパンダデータフレームの値を変更する

  2. 2

    パンダデータフレームの特定のIDに基づいて列の値を変更する

  3. 3

    列の値の違いに基づいてパンダのデータフレームを分割する方法

  4. 4

    他の行の値に基づいてパンダのデータフレーム列を追加する方法

  5. 5

    パンダデータフレームの複数の列値に基づいて行を選択する

  6. 6

    同じパンダデータフレームの列の値に基づいて行を複製する方法

  7. 7

    年に基づいてパンダデータフレームに複数の列を作成する方法

  8. 8

    含まれているテキスト値に基づいてパンダのデータフレーム列を複数の列に分割する方法

  9. 9

    特定の条件に基づいてパンダデータフレームの特定の列の特定の値を置き換える方法は?

  10. 10

    特定の列の値に基づいて2つのデータフレームを比較し、パンダでそれらを削除する方法

  11. 11

    別の列の値に基づいてパンダデータフレームに列を追加する

  12. 12

    列の値に基づいて複数のパンダデータフレームを作成します

  13. 13

    他の列の条件に基づいてパンダのデータフレーム列を操作する方法

  14. 14

    パンダ:特定の列の文字列値に基づいて、データフレームを個別のデータフレームに分割します

  15. 15

    列の値に基づいてパンダデータフレームの行にnanを設定する

  16. 16

    パンダは、すべての行の値に基づいてデータフレームに新しい列を追加する方法、データフレーム全体に適用される特定の列の値

  17. 17

    列の値に基づいてパンダのデータフレームを結合する

  18. 18

    行の平均値に基づいてパンダデータフレームの列を除外する

  19. 19

    他の列の値に基づいてパンダデータフレーム行を作成する

  20. 20

    Python-パンダ-データフレーム-条件に基づいて単一の列を複数のブール列に分解します

  21. 21

    パンダの列に基づいて2つのデータフレームをマージする方法

  22. 22

    別の列パンダデータフレームに基づいて列値を抽出する

  23. 23

    列の値に基づいてデータフレーム列を転置する-パンダ

  24. 24

    パンダ-データフレームの複数の条件に基づいて列を操作する

  25. 25

    パンダのデータフレームの別の列の値に基づいて列を追加します

  26. 26

    1つ以上の列に基づいてパンダデータフレームに値を追加/挿入する

  27. 27

    パンダの2番目のデータフレームの列値に基づいて1つのデータフレームから列を削除する

  28. 28

    データフレーム内の他の列に基づいてパンダのデータフレーム列の値を変更する

  29. 29

    文字列のリストに基づいてパンダデータフレームから値を抽出する

ホットタグ

アーカイブ