pandas 基于旧 Dataframe 生成新 Dataframe 并将其存储在列表中

jaql4c8m  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(119)

我的原始dataframe如下所示:

H1 H2  H3  H4  H5
A1   1  0   0   1   0
A2   1  0   0   1   0
A3   1  1   0   0   0
A4   1  0   1   0   0
A5   1  0   1   0   1
A6   1  1   1   0   0
A7   1  0   1   0   0
A8   1  0   1   0   1
A9   1  1   1   0   0

我有两个以列表形式存储的 Dataframe

#list_of_dataframes
[
     H1 H2  H3  H4  H5
A2   1  0   0   1   0
A3   1  1   0   0   0
A4   1  0   1   0   0
A5   1  0   1   0   1
A6   1  1   1   0   0,
     H1 H2  H3  H4  H5
A1   1  0   0   1   0
A3   1  1   0   0   0
A7   1  0   1   0   0
A8   1  0   1   0   1
A9   1  1   1   0   0]

我想生成一个输出dataframe,应该存储在列表的形式。我的输出 Dataframe 应该保持原始 Dataframe 的所有行索引和列索引。但是对于将以列表的形式存储的新 Dataframe ,如果相应的行存在于 Dataframe 的列表中,则它应该在原始 Dataframe 中放置1,否则它应该放置0。

# list of Output dataframe 
   [
        H1 H2  H3  H4  H5
  A1    0  0   0   0   0
  A2    1  1   1   1   1
  A3    1  1   1   1   1
  A4    1  1   1   1   1
  A5    1  1   1   1   1
  A6    1  1   1   1   1
  A7    0  0   0   0   0
  A8    0  0   0   0   0
  A9    0  0   0   0   0,
  
           H1   H2  H3  H4  H5
      A1   1    1   1   1   1
      A2   0    0   0   0   0
      A3   1    1   1   1   1
      A4   0    0   0   0   0
      A5   0    0   0   0   0
      A6   0    0   0   0   0
      A7   1    1   1   1   1
      A8   1    1   1   1   1
      A9   1    1   1   1   1]
yws3nbqq

yws3nbqq1#

你可以align输入df与列表中的每个 DataFrames

def delta(dfl, dfr):
    tmp = dfl.align(dfr)[1]
    tmp[tmp.notnull()] = 1
    out = tmp.fillna(0, downcast="infer")
    return out

out_list = [delta(in_df, df) for df in lst] # assuming lst in the list of your dfs

另一个带有eq/replace的变体:

out_list = [in_df.eq(df).replace({True: 1, False: 0}) for df in lst]

输出:

[    H1  H2  H3  H4  H5
 A1   0   0   0   0   0
 A2   1   1   1   1   1
 A3   1   1   1   1   1
 A4   1   1   1   1   1
 A5   1   1   1   1   1
 A6   1   1   1   1   1
 A7   0   0   0   0   0
 A8   0   0   0   0   0
 A9   0   0   0   0   0,
     H1  H2  H3  H4  H5
 A1   1   1   1   1   1
 A2   0   0   0   0   0
 A3   1   1   1   1   1 # <-- shows that you have a typo in your expected output
 A4   0   0   0   0   0
 A5   0   0   0   0   0
 A6   0   0   0   0   0
 A7   1   1   1   1   1
 A8   1   1   1   1   1
 A9   1   1   1   1   1]

相关问题