1

我有一个数据框(df_input),我试图通过将公式应用于每行中的每个元素,将其转换为另一个数据框(df_output)。该公式需要有关整行的信息(最小值、最大值、中值)。

df_input:

            A   B   C   D   E   F   G   H   I   J
2011-01-01  60  48  26  29  41  91  93  87  39  65
2011-01-02  88  52  24  99  1   27  12  26  64  87
2011-01-03  13  1   38  60  8   50  59  1   3   76

df_输出:

           F(A)F(B)F(C)F(D)F(E)F(F)F(G)F(H)F(I)F(J)
2011-01-01  93  54  45  52  8   94  65  37  2   53
2011-01-02  60  44  94  62  78  77  37  97  98  76
2011-01-03  53  58  16  63  60  9   31  44  79  35

如上所述,在将 f(x) 应用于每行的每个单元格之后,我试图从 df_input 转到 df_output。函数 foo 试图通过将行的最小值、中值和最大值与某些坐标进行 OLS 回归来将元素 x 映射到 f(x)。每个时期都这样做。

我知道我遍历行,然后为每一行将函数应用于每个元素。我正在苦苦挣扎的地方是将 foo 的输出转换为 df_output。

for index, row in df_input.iterrows():
    min=row.min() 
    max=row.max() 
    mean=row.mean()

    #apply function to row
    new_row = row.apply(lambda x: foo(x,min,max,mean)

    #add this to df_output
    help!

我目前的想法是逐行建立新的df?我正在尝试这样做,但我得到了很多多索引列等。任何指针都会很棒。

非常感谢...祝大家圣诞快乐。

4

1 回答 1

0

考虑使用DataFrame.*方法计算行聚合,然后DataFrame.apply()跨列传递系列值:

# ROW-WISE AGGREGATES
df['row_min'] = df.min(axis=1)
df['row_max'] = df.max(axis=1)
df['row_mean'] = df.mean(axis=1)

# COLUMN-WISE CALCULATION (DEFAULT axis=0)
new_df = df[list('ABCDEFGHIJ')].apply(lambda col: foo(col, 
                                                      df['row_min'], 
                                                      df['row_max'],  
                                                      df['row_mean']))
于 2017-12-24T06:12:27.413 回答