当前位置:   article > 正文

Python Dataframe-B更新Dataframe-A_pandas 用dataframe更新另一个

pandas 用dataframe更新另一个

假设现在有两个dataframe,分别是A和B,它们有相同的列text和label。现在想使用B的label来更新A的label,基于它们共同的text。

数据示例
  1. import pandas as pd
  2. # Sample DataFrames A and B
  3. data_A = {'text': ['text1', 'text2', 'text3', 'text4'], 'label': [1, 0, 0, 1]}
  4. data_B = {'text': ['text3', 'text1'], 'label': [1, 0]}
  5. A = pd.DataFrame(data_A)
  6. B = pd.DataFrame(data_B)
  7. print(A)
  8. print(B)

 预期输出

方法1
  1. # Create a mapping dictionary using the 'text' column as the key and the 'label' column as the value from DataFrame B
  2. mapping_dict = B.set_index('text')['label'].to_dict()
  3. # Use the `map()` function to update the 'label' column in DataFrame A
  4. A['label'] = A['text'].map(mapping_dict).fillna(A['label'])
  5. A['label'] = A['label'].astype(int)
  6. print(A)
方法2
  1. # Merge DataFrames on 'text' column, keeping only the 'label' column from df_B
  2. merged_df = df_B[['text', 'label']].merge(df_A[['text']], on='text', how='right')
  3. # Set the index of both DataFrames to 'text' for the update operation
  4. df_A.set_index('text', inplace=True)
  5. merged_df.set_index('text', inplace=True)
  6. # Update the 'label' column in df_A with the values from the merged_df
  7. df_A.update(merged_df)
  8. # Reset the index of df_A
  9. df_A.reset_index(inplace=True)
  10. print(df_A)
将方法1改为函数形式
  1. import pandas as pd
  2. def my_update(df_updater, df_updatee, based_column_name, update_column_name):
  3. # Create a mapping dictionary from the df_updater DataFrame
  4. mapping_dict = df_updater.set_index(based_column_name)[update_column_name].to_dict()
  5. update_column_type = df_updatee[update_column_name].dtype
  6. # Update the specified column in the df_updatee DataFrame using the mapping dictionary
  7. df_updatee[update_column_name] = df_updatee[based_column_name].map(mapping_dict).fillna(df_updatee[update_column_name])
  8. # Convert the column datatype back to its original datatype
  9. df_updatee[update_column_name] = df_updatee[update_column_name].astype(update_column_type)
  10. # Example usage
  11. data_A = {'text': ['text1', 'text2', 'text3', 'text4'], 'label': [1, 0, 0, 1], 'other': ['a', 'b', 'c', 'd']}
  12. data_B = {'text': ['text3', 'text1'], 'label': [1, 0]}
  13. A = pd.DataFrame(data_A)
  14. B = pd.DataFrame(data_B)
  15. my_update(B, A, 'text', 'label')
  16. print(A)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/153211
推荐阅读
相关标签
  

闽ICP备14008679号