カテゴリ固有の列と値をデータフレームに追加します

マライア・アキンビ

一部の列に対応するカテゴリに基づいて、カテゴリ固有の列を作成しようとしています。

これは、(1)2つのカテゴリを2つの別々のデータフレームにスライスし、(2)日付に2つのデータフレームをマージし、(3)冗長な列を削除し、(4)新しい列を作成する(カテゴリに依存しない)ことで、ラウンドアバウトの方法で実現しました。 (4)カテゴリ固有の列を削除します。この変換を行うためのより効率的な方法を知っていますか?私のコードはサンプルの入力/出力の下にあります

入力:

      wk start  car            rims color   Autopilot$  Sunroof$
0   2018-09-09  tesla model x   17  black   3000         0
1   2018-09-16  tesla model x   14  yellow  3000         0
2   2018-09-23  tesla model x   13  white   3000         0
3   2018-09-09  tesla model 3   19  grey    0            2000
4   2018-09-16  tesla model 3   21  pink    0            2000

理想的な出力:

     wk       rims-mod3 rims-modx   color-mod3  color-modx  Auto$   roof$
0   2018-09-09  17         0        black       grey        3000    2000
1   2018-09-16  14         19       yellow      pink        3000    2000
2   2018-09-23  13         21       white       NaN         3000    0

私のコード:

import pandas as pd
df = pd.DataFrame({'wk start': ['2018-09-09', '2018-09-16', '2018-09-23','2018-09-09', '2018-09-16'], 
    'car': [ 'tesla model x', 'tesla model x', 'tesla model x','tesla model 3','tesla model 3'],
    'rims': [17,14,13,19,21],
    'color':['black','yellow','white','grey','pink'],
    'Autopilot$':[3000,3000, 3000,0,0],
    'Sunroof$':[0,0,0,2000,2000]})
model3 = df[df['car']=='tesla model 3']
modelx = df[df['car']=='tesla model x']
example = model3.merge(modelx, how='outer',left_on='wk start',right_on='wk start',suffixes=('_model3', '_modelx'))
del example['car_model3']
del example['car_modelx']
example['AUTOPILOT']=example['Autopilot$_model3']+example['Autopilot$_modelx']
example['SUNROOF']=example['Sunroof$_model3']+example['Sunroof$_modelx']
del example['Autopilot$_model3']
del example['Autopilot$_modelx']
del example['Sunroof$_modelx']
del example['Sunroof$_model3']

使用されるその他のリソースは、question1question2です。

ジェズリール

使用する:

df = df.set_index(['wk start','car']).unstack()
df.columns = df.columns.map('_'.join)

df = df.reset_index()

df = df.loc[:, df.fillna(0).ne(0).any()]
print (df)
     wk start  rims_tesla model 3  rims_tesla model x color_tesla model 3  \
0  2018-09-09                19.0                17.0                grey   
1  2018-09-16                21.0                14.0                pink   
2  2018-09-23                 NaN                13.0                 NaN   

  color_tesla model x  Autopilot$_tesla model x  Sunroof$_tesla model 3  
0               black                    3000.0                  2000.0  
1              yellow                    3000.0                  2000.0  
2               white                    3000.0                     NaN  

説明

  1. 形状変更set_indexunstack
  2. mapおよびによって列のMultiIndexを平坦化するjoin
  3. 列へのインデックス DataFrame.reset_index
  4. 最終削除のみ0の列によるboolean indexingloc

編集:

この行を少し説明できますかdf.loc [:, df.fillna(0).ne(0).any()]?私はそれが何をするのか理解できませんか?nan値はありません。

使用する場合unstack、このサンプルのようにいくつかの欠落値が発生する可能性があります。

print (df)
     wk start  rims_tesla model 3  rims_tesla model x color_tesla model 3  \
0  2018-09-09                19.0                17.0                grey   
1  2018-09-16                21.0                14.0                pink   
2  2018-09-23                 NaN                13.0                 NaN   

  color_tesla model x  Autopilot$_tesla model 3  Autopilot$_tesla model x  \
0               black                       0.0                    3000.0   
1              yellow                       0.0                    3000.0   
2               white                       NaN                    3000.0   

   Sunroof$_tesla model 3  Sunroof$_tesla model x  
0                  2000.0                     0.0  
1                  2000.0                     0.0  
2                     NaN                     0.0  

したがって、NaNを含むすべてゼロまたはすべてゼロを含まない列に対してTrue値を返す必要があります(使用の理由は何ですかfillna(0))。

print (df.fillna(0).ne(0))
   wk start  rims_tesla model 3  rims_tesla model x  color_tesla model 3  \
0      True                True                True                 True   
1      True                True                True                 True   
2      True               False                True                False   

   color_tesla model x  Autopilot$_tesla model 3  Autopilot$_tesla model x  \
0                 True                     False                      True   
1                 True                     False                      True   
2                 True                     False                      True   

   Sunroof$_tesla model 3  Sunroof$_tesla model x  
0                    True                   False  
1                    True                   False  
2                   False                   False  

少なくとも1つのTrueがanyであるかどうかを確認します

print (df.fillna(0).ne(0).any())
wk start                     True
rims_tesla model 3           True
rims_tesla model x           True
color_tesla model 3          True
color_tesla model x          True
Autopilot$_tesla model 3    False
Autopilot$_tesla model x     True
Sunroof$_tesla model 3       True
Sunroof$_tesla model x      False
dtype: bool

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

既存の列のカテゴリ値に基づいてデータフレームに列を追加します

分類Dev

因子カテゴリごとにデータフレームの最後の値を取得します

分類Dev

パンダ:カテゴリカルデータフレームに列を追加します

分類Dev

dplyrを使用して、複数行の値を持つデータフレームを列カテゴリごとに1行に再構築します

分類Dev

pandasデータフレームに列を追加すると、カテゴリカルインデックスエラーが発生します

分類Dev

2つのカテゴリ列と1つのPythonの値に基づいてデータフレームを集計します

分類Dev

同じデータフレーム内の新しい列に、カテゴリごとにデータフレーム列の確率値を追加するにはどうすればよいですか?

分類Dev

カスタム値の列をデータフレームに追加します

分類Dev

データフレームに列を追加し、他の列のカテゴリ変数をテストします

分類Dev

R-Yelpデータビジネスカテゴリ列には、ビジネスごとに複数のカテゴリがあります。値が1と0のカテゴリ固有の列に分割したい

分類Dev

Python Pandas:別のデータフレームの文字列コメントからデータフレームのカテゴリの最大値を削除します

分類Dev

Pythonのカテゴリ値データフレームに基づいて、新しい列を抽出し、値を入力します

分類Dev

R:列のカテゴリに基づいてデータフレームから重複を削除します

分類Dev

新しい列と対応する行固有の値をsparkデータフレームに追加するにはどうすればよいですか?

分類Dev

pandas データフレームのカテゴリ値としてインデックス値を使用する

分類Dev

他のデータフレーム列に基づいてパンダ列のカテゴリの値をマップします

分類Dev

カテゴリ列のdinstict値の数に基づいて、pandasデータフレームからすべての行を削除します

分類Dev

Pythonパンダ:別のデータフレームのカテゴリ値に基づいて新しい列を作成します

分類Dev

データフレームのリストとしてデータフレームに列を追加します

分類Dev

データフレームそのカテゴリの文字列値のリストに基づいて、列をカテゴリ名に更新する

分類Dev

列の値に基づいてデータフレームのカテゴリ変数を作成する

分類Dev

データフレーム列のレベルを使用して、各レベルに固有の増分番号を持つ新しい列を追加します

分類Dev

pysparkデータフレーム列のすべてのカテゴリを印刷します

分類Dev

フォーラムカテゴリにモデレーターを追加すると、モデル[App \ Subreddit]のクエリ結果が表示されません

分類Dev

2つのカテゴリのPandasデータフレームの値をピボットテーブルにカウントします

分類Dev

ダミー列を生成する前に、データ フレームのカテゴリをフィルタリングします。

分類Dev

カテゴリカル列でDaskデータフレームをフィルタリングしますか?

分類Dev

データ フレームを数値カテゴリに

分類Dev

pythonpandasはデフォルト値としてデータフレーム列にリストを追加します

Related 関連記事

  1. 1

    既存の列のカテゴリ値に基づいてデータフレームに列を追加します

  2. 2

    因子カテゴリごとにデータフレームの最後の値を取得します

  3. 3

    パンダ:カテゴリカルデータフレームに列を追加します

  4. 4

    dplyrを使用して、複数行の値を持つデータフレームを列カテゴリごとに1行に再構築します

  5. 5

    pandasデータフレームに列を追加すると、カテゴリカルインデックスエラーが発生します

  6. 6

    2つのカテゴリ列と1つのPythonの値に基づいてデータフレームを集計します

  7. 7

    同じデータフレーム内の新しい列に、カテゴリごとにデータフレーム列の確率値を追加するにはどうすればよいですか?

  8. 8

    カスタム値の列をデータフレームに追加します

  9. 9

    データフレームに列を追加し、他の列のカテゴリ変数をテストします

  10. 10

    R-Yelpデータビジネスカテゴリ列には、ビジネスごとに複数のカテゴリがあります。値が1と0のカテゴリ固有の列に分割したい

  11. 11

    Python Pandas:別のデータフレームの文字列コメントからデータフレームのカテゴリの最大値を削除します

  12. 12

    Pythonのカテゴリ値データフレームに基づいて、新しい列を抽出し、値を入力します

  13. 13

    R:列のカテゴリに基づいてデータフレームから重複を削除します

  14. 14

    新しい列と対応する行固有の値をsparkデータフレームに追加するにはどうすればよいですか?

  15. 15

    pandas データフレームのカテゴリ値としてインデックス値を使用する

  16. 16

    他のデータフレーム列に基づいてパンダ列のカテゴリの値をマップします

  17. 17

    カテゴリ列のdinstict値の数に基づいて、pandasデータフレームからすべての行を削除します

  18. 18

    Pythonパンダ:別のデータフレームのカテゴリ値に基づいて新しい列を作成します

  19. 19

    データフレームのリストとしてデータフレームに列を追加します

  20. 20

    データフレームそのカテゴリの文字列値のリストに基づいて、列をカテゴリ名に更新する

  21. 21

    列の値に基づいてデータフレームのカテゴリ変数を作成する

  22. 22

    データフレーム列のレベルを使用して、各レベルに固有の増分番号を持つ新しい列を追加します

  23. 23

    pysparkデータフレーム列のすべてのカテゴリを印刷します

  24. 24

    フォーラムカテゴリにモデレーターを追加すると、モデル[App \ Subreddit]のクエリ結果が表示されません

  25. 25

    2つのカテゴリのPandasデータフレームの値をピボットテーブルにカウントします

  26. 26

    ダミー列を生成する前に、データ フレームのカテゴリをフィルタリングします。

  27. 27

    カテゴリカル列でDaskデータフレームをフィルタリングしますか?

  28. 28

    データ フレームを数値カテゴリに

  29. 29

    pythonpandasはデフォルト値としてデータフレーム列にリストを追加します

ホットタグ

アーカイブ