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

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

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

import pandas as pd
import numpy as np

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')
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')

所需输出:

2021-05-31 2021-06-30
experiment_id                      
run1                 NaN     parrot
run2                 dog     ranger
run3                 NaN        NaN

非常感谢。

j0pj023g

j0pj023g1#

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

unique_str_values = list(pd.unique(strings_df.values.ravel('K')))
mapping_str_int = {}
i=1
for string in unique_str_values:
    mapping_str_int[string] = i
    i+=1

mapping_int_str = dict((v,k) for k,v in mapping_str_int.items())
strings_as_int_df = strings_df.replace(mapping_str_int)
output_int = binary_df * strings_as_int_df
output_str = output_int.replace(mapping_int_str)

相关问题