別の2つのデータフレームからの値に基づいてパンダデータフレームを埋める方法

ハンズグ

私は4つのパンダデータフレームを持っています。最初の2つはカテゴリ値と数値dfです。

Cat_data = [
        ['Color', 'red', 0.2543], 
        ['Color', 'orange',0.1894], 
        ['Color', 'yellow',-0.2836],
        ['Fruit', 'orange', -1.3647], 
        ['Fruit','banana',0.3648]
        ] 

Cat_df = pd.DataFrame(Cat_data, columns = ['Variable', 'Cats', 'Value']) 

Num_data = [
        ['Quantity', '-inf', '5', 0.2145], 
        ['Quantity', '5', '10', 0.0268], 
        ['Quantity', '10', 'inf', -0.5421], 
        ['Rating', '-inf', '0.5', 0.6521], 
        ['Rating','0.5', 'inf', -0.4378], 
        ] 

Num_df = pd.DataFrame(Num_data, columns = ['Variable', 'Inclusive', 'Exclusive', 'Value']) 

Num_dataでは、「包括的」と「排他的」が値をチェックしています。

最初のレコードで言う> = -infおよび<5、

2番目のレコード値> = 5および<10でも同じで、値はActual_dfから取得されます

3番目のデータフレームは実際の値です

Actual_data = [
        ['yellow', 'banana', '4', '0.5'] 
        ] 

Actual_df = pd.DataFrame(Actual_data, columns = ['Color', 'Fruit', 'Quantity', 'Rating']) 

4番目は、Actual_dfと同じ列名を持つValueDataFrameです。

Value_df = pandas.DataFrame(numpy.zeros((1, 4)),
columns = ['Color', 'Fruit', 'Quantity', 'Rating'])

Value_dfにCat_dataの「Value」列とActual_dataのデータに対応する「Num_data」「Value」列を入力する必要があります。4つのdfをマージして値を取得し、それとともに「包括的」列と「排他的」列を確認する方法がわかりません。

実際のデータには、「黄色」、「バナナ」、「4」、「0.5」に対応する値があります。

黄色はCat_dfに-0.2836としてあります

バナナはCat_dfに0.3648としてあります

数量は0.2145としてNum_dfにあります

評価はNum_dfに-0.4378としてあります

Value_dfの結果DataFrameは次のようになります

Color    Fruit   Quantity   Rating
-0.2836  0.3648  0.2145     -0.4378

Cat_dataについては、私は好きでした

Value_df['Color'] = Actual_df['Color'].map(Cat_df.set_index('Cats')['Value'])

色と果物の両方がオレンジ色の問題であり、どちらの値が取得されるかが問題であるため、変数も一致させる必要があり、次のようにエラーが発生します。

InvalidIndexError: Reindexing only valid with uniquely valued Index objects
jottbe

範囲がNum_df重複していないという事実に信頼できる場合は、次のようにこれを行うことができます。いくつかのヘルパー関数を定義していることに注意してください。それがなくても実行できますが、少し読みやすくなると思います。

# convert the datatypes (guess your real data does not store numeric values in strings)
Num_df[['Inclusive', 'Exclusive']]= Num_df[['Inclusive', 'Exclusive']].astype('float32')
Actual_df[['Quantity', 'Rating']]=Actual_df[['Quantity', 'Rating']].astype('float32')

# define two helper functions (or just store the categories / variables in different dataframes)
def get_variable_data(df, variable):
    df= df.loc[df['Variable'] == variable, ['Cats', 'Value']].copy()
    df.set_index(['Cats'], inplace=True)
    df.columns= [variable + '_value']
    return df

def get_num_data(df, variable):
    df= df.loc[df['Variable'] == variable, ['Inclusive', 'Value']].copy()
    df.sort_values(['Inclusive'], inplace=True)
    df.columns=[variable + '_inclusive', variable + '_value']

# join the first part by a regular join
Joined_df= Actual_df
for cat in ['Color', 'Fruit']:
    Joined_df= Joined_df.merge(get_variable_data(Cat_df, cat), left_on=[cat], right_index=True, how='left')

# now join according ranges using asof
for cat in ['Quantity', 'Rating']:
    print(cat)
    Joined_df= pd.merge_asof(Joined_df, get_num_data(Num_df, cat), left_on=[cat], right_on='Inclusive', direction='backward', suffixes=['', '_'+cat])

# drop the excess columns
Joined_df.drop([col for col in Joined_df if col.endswith('_inclusive')], axis='columns', inplace=True)

# the result of this is
    Color   Fruit  Quantity  Rating  Color_value  Fruit_value  Quantity_value  Rating_value
0  yellow  banana       4.0     0.5      -0.2836       0.3648          0.2145       -0.4378

上で書いたように、最後のステップではmerge_asof、範囲にギャップがなく、値がなく、値の範囲全体に及ぶことを前提としています。このため、範囲の終わりを確認する必要はありません。ただし、その仮定が正しくない場合は、コードを少し変更する必要があります。

  1. そのまま使用merge_asofし、変更するだけでget_num_dataExclusiveも返されます。

  2. Join_df.loc[Joined_df[cat]>=Joined_df[cat + '_exclusive'], cat]=defaultvalue排他範囲を超える値を削除するために使用します。

ところで、この方法で行うのは本当に安全です。列の値が存在する行がある場合、利用可能な最大値、つまり、以下の値を検索するため、catによって選択されるmerge_asofためInclusiveです。の値col(つまり、少なくとも重複する範囲がない場合ですが、例のように星座の場合はありそうにないようです)。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

別のデータフレームの列に基づいてパンダのデータフレーム列を埋める

分類Dev

前の列に基づいて、パンダデータフレームのNaNセルを埋める方法は?

分類Dev

2つの条件に基づいてパンダデータフレームから値を抽出します

分類Dev

別のデータフレーム値に基づいて、パンダデータフレームの行からシリーズ値を削除します

分類Dev

部分的な文字列の一致に基づいて、別のデータフレームから1つのデータフレーム列を埋めます

分類Dev

別のデータフレームに基づいてパンダデータフレームを生成する

分類Dev

パンダで、別のデータフレームに基づいてデータフレームから行を削除する方法は?

分類Dev

別のデータフレームの列名とインデックス値に基づいてデータフレームを埋める

分類Dev

別の日のいくつかの列に基づいてパンダデータフレームの値をシフトする方法

分類Dev

Rの2つの一致条件に基づいて、あるデータフレームから別のデータフレームに値を追加する

分類Dev

列の値に基づいてコンマで区切って、1つのパンダデータフレームから別のパンダデータフレームにデータをコピーする

分類Dev

列の値に基づいて、1つのパンダデータフレームから別のパンダデータフレームにデータをコピーする

分類Dev

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

分類Dev

パンダの別のデータフレームからの同様の値に基づいて、データフレームの列に入力します

分類Dev

別のテーブルからのチェックに基づいてパンダデータフレームの列の値を置き換える方法

分類Dev

いくつかの条件に基づいてパンダデータフレームを効率的に2つのデータフレームに分割する

分類Dev

別のデータフレームの条件に基づいてパンダのデータフレームにデータを入力する効率的な方法

分類Dev

日付列と日付範囲に基づいてパンダのデータフレームを埋める

分類Dev

パンダ-2つのデータフレーム間の共通の列に基づいて別のデータフレームから列の値を集計する

分類Dev

Python Pandas:条件に基づいて1つのデータフレームの値を2番目のデータフレームの値で埋めます

分類Dev

別のデータフレーム値に基づいてパンダの値を並べ替える

分類Dev

別のデータフレームからの値に基づいてデータフレーム値の平均を見つける

分類Dev

2番目のデータフレームの行に基づいて1つのデータフレームのパンダに値を設定します

分類Dev

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

分類Dev

一連の条件に基づいてパンダデータフレームから値を取得する

分類Dev

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

分類Dev

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

分類Dev

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

Related 関連記事

  1. 1

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

  2. 2

    別のデータフレームの列に基づいてパンダのデータフレーム列を埋める

  3. 3

    前の列に基づいて、パンダデータフレームのNaNセルを埋める方法は?

  4. 4

    2つの条件に基づいてパンダデータフレームから値を抽出します

  5. 5

    別のデータフレーム値に基づいて、パンダデータフレームの行からシリーズ値を削除します

  6. 6

    部分的な文字列の一致に基づいて、別のデータフレームから1つのデータフレーム列を埋めます

  7. 7

    別のデータフレームに基づいてパンダデータフレームを生成する

  8. 8

    パンダで、別のデータフレームに基づいてデータフレームから行を削除する方法は?

  9. 9

    別のデータフレームの列名とインデックス値に基づいてデータフレームを埋める

  10. 10

    別の日のいくつかの列に基づいてパンダデータフレームの値をシフトする方法

  11. 11

    Rの2つの一致条件に基づいて、あるデータフレームから別のデータフレームに値を追加する

  12. 12

    列の値に基づいてコンマで区切って、1つのパンダデータフレームから別のパンダデータフレームにデータをコピーする

  13. 13

    列の値に基づいて、1つのパンダデータフレームから別のパンダデータフレームにデータをコピーする

  14. 14

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

  15. 15

    パンダの別のデータフレームからの同様の値に基づいて、データフレームの列に入力します

  16. 16

    別のテーブルからのチェックに基づいてパンダデータフレームの列の値を置き換える方法

  17. 17

    いくつかの条件に基づいてパンダデータフレームを効率的に2つのデータフレームに分割する

  18. 18

    別のデータフレームの条件に基づいてパンダのデータフレームにデータを入力する効率的な方法

  19. 19

    日付列と日付範囲に基づいてパンダのデータフレームを埋める

  20. 20

    パンダ-2つのデータフレーム間の共通の列に基づいて別のデータフレームから列の値を集計する

  21. 21

    Python Pandas:条件に基づいて1つのデータフレームの値を2番目のデータフレームの値で埋めます

  22. 22

    別のデータフレーム値に基づいてパンダの値を並べ替える

  23. 23

    別のデータフレームからの値に基づいてデータフレーム値の平均を見つける

  24. 24

    2番目のデータフレームの行に基づいて1つのデータフレームのパンダに値を設定します

  25. 25

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

  26. 26

    一連の条件に基づいてパンダデータフレームから値を取得する

  27. 27

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

  28. 28

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

  29. 29

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

ホットタグ

アーカイブ