通过另一个二进制 Dataframe 过滤 Dataframe

x8diyxa7  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(390)

意图:通过另一个具有1/np.nan的二进制 Dataframe 过滤具有字符串值的 Dataframe 。输出 Dataframe 应仅包含在相应二进制df中具有1的字符串值。

  1. import pandas as pd
  2. import numpy as np
  3. strings_df = pd.DataFrame({'experiment_id': ['run1','run2','run3'],'2021-05-31': ['cow','dog','rat'], '2021-06-30': ['parrot', 'ranger','mouse']}).set_index('experiment_id')
  4. binary_df = pd.DataFrame({'experiment_id': ['run1','run2','run3'],'2021-05-31': [np.NaN,1,np.NaN], '2021-06-30': [1, 1,np.NaN]}).set_index('experiment_id')

所需输出:

  1. 2021-05-31 2021-06-30
  2. experiment_id
  3. run1 NaN parrot
  4. run2 dog ranger
  5. run3 NaN NaN

非常感谢。

j0pj023g

j0pj023g1#

下面的代码可以工作,但看起来不太像Python:

  1. unique_str_values = list(pd.unique(strings_df.values.ravel('K')))
  2. mapping_str_int = {}
  3. i=1
  4. for string in unique_str_values:
  5. mapping_str_int[string] = i
  6. i+=1
  7. mapping_int_str = dict((v,k) for k,v in mapping_str_int.items())
  8. strings_as_int_df = strings_df.replace(mapping_str_int)
  9. output_int = binary_df * strings_as_int_df
  10. output_str = output_int.replace(mapping_int_str)

相关问题