【问题标题】:Summarize data from a list of pandas dataframes从 pandas 数据框列表中汇总数据
【发布时间】:2020-08-22 15:20:05
【问题描述】:

我有一个 dfs 列表,df_list:

[   CLASS  IDX  A  B  C  D  
 0     1    1     1.0     0.0     0.0     0.0  
 1     1    2     1.0     0.0     0.0     0.0  
 2     1    3     1.0     0.0     0.0     0.0,  
    CLASS  IDX  A  B  C  D  
 0     1    1     NaN     NaN     NaN     NaN  
 1     1    2     1.0     0.0     0.0     0.0  
 2     1    3     1.0     0.0     0.0     0.0,  
    CLASS  IDX  A  B  C  D  
 0     1    1   0.900   0.100     0.0     0.0  
 1     1    2   1.000   0.000     0.0     0.0  
 2     1    3   0.999   0.001     0.0     0.0]  

我想根据各个 dfs 中的条件和值将数据汇总到一个 df 中。每个 df 有 4 列感兴趣,A、B、C 和 D。例如,如果 df_list[0] 中的 A 列中的值 >= 0.1,我想在摘要 df 中打印“A”。如果两列(例如 A 和 B)的值 >= 0.1,我想打印“A/B”。此数据的最终摘要 df 应为:

CLASS   IDX 0   1   2
0   1   1   A   NaN A/B
1   1   2   A   A   A
2   1   3   A   A   A

在摘要df中,列标签(0,1,2)代表df在df_list中的位置。

我从这个开始

for index, values in enumerate(df_list):
    # summarize the data

但不确定继续的最佳方式是什么..

非常感谢任何帮助!

【问题讨论】:

  • 我可以帮你,但我不太明白你的问题。您是否能够粘贴代码以重新创建数据框列表并准确显示您想要的输出以及为什么? “例如”位太未定义。

标签: python pandas dataframe


【解决方案1】:

这里有一种方法

cols = ['A','B','C','D']

def join_func(df):
    m = df[cols].ge(0.1)
    return (df[cols].mask(m, cols)
                    .where(m, np.nan)
                    .apply(lambda x: '/'.join(x.dropna()), axis=1))

result = (df_list[0].loc[:, ['CLASS','IDX']]
                       .assign(**{str(i) : join_func(df) 
                                  for i, df in enumerate(df_list)}))
print(result)
   CLASS  IDX  0  1     2
0      1    1  A      A/B
1      1    2  A  A     A
2      1    3  A  A     A

【讨论】:

  • 非常感谢!但是 my_list_df 应该是 df_list,不是吗?
猜你喜欢
  • 2021-03-25
  • 2020-02-24
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多