如何在熊猫的特定位置添加列?

Cam*_*Cam 2 python numpy dataframe pandas

我有这个数据框:

df = pd.DataFrame({'FS':[1,1,2],'FL':[2,3,4],'GS':[5,8,9],'GL':[5,2,4],'JJ':['no','more','math']})
print(df)

    FS  FL  GS  GL   JJ
0   1   2   5   5    no
1   1   3   8   2  more
2   2   4   9   4  math
Run Code Online (Sandbox Code Playgroud)

我想在循环 b/c 中的“L”(长)和“S”(短)之间添加列,此数据帧长 64 列,但在填充字符串的列 JJ 之前停止。我想对这些列执行的操作是:Ratio = S/(S+L) 所以我的数据框看起来像这样:

df = pd.DataFrame({'FS':[1,1,2],'FL':[2,3,4],'FRatio':[0.333,0.25,0.333],\
                   'GS':[5,8,9],'GL':[5,2,4],'GRatio':[0.5,0.8,0.692],\
                   'JJ':['no','more','math']})
print(df)

   FS  FL  FRatio  GS  GL  GRatio    JJ
0   1   2   0.333   5   5   0.500    no
1   1   3   0.250   8   2   0.800  more
2   2   4   0.333   9   4   0.692  math
Run Code Online (Sandbox Code Playgroud)

我想过将数据帧融合为长格式,但每个 S/L 对都是独一无二的,我想不出将它们分开的方法。

ALo*_*llz 5

使用insert放置在您想要的列。找到给定前缀的“L”列的位置,然后将其放在之后。这假设您的 DataFrame 是在开始时组织的,以便 'XS' 和 'XL' 列按该顺序成对出现。

您可以手动指定前缀或使用除最后一个之外的所有标签字符(即删除 'S' 或 'L') 'JJ' 列之前的所有列,以确定它们是什么。

prefixes = df.columns[:df.columns.get_loc('JJ')].str[:-1].unique()
#prefixes = ['F', 'G']

for prefix in prefixes:
    s = df[f'{prefix}S']/(df[f'{prefix}S'] + df[f'{prefix}L'])
    # Location after the 'XL'
    loc = df.columns.get_loc(f'{prefix}L')+1
    df.insert(loc, f'{prefix}Ratio', s)
Run Code Online (Sandbox Code Playgroud)
   FS  FL    FRatio  GS  GL    GRatio    JJ
0   1   2  0.333333   5   5  0.500000    no
1   1   3  0.250000   8   2  0.800000  more
2   2   4  0.333333   9   4  0.692308  math
Run Code Online (Sandbox Code Playgroud)