减去数据帧中的两列,在循环中创建第三列

2024-09-27 23:19:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含大量列的数据框架,它们通常遵循以下模式:

“计算过的东西膨胀了”,
“在计算过的事情上,”
“在计算出的东西上,
“在计算的事情上,”
“按计算的客户流失率”,fg2\u perc,
“计算过的东西膨胀了”,
“计算过的事情”一词,
“计算过的东西”,小于br/> “计算过的3件事情”,
'关闭\u计算的\u客户流失率\u fg2\u perc'

如果它们以开或关开始,则具有相同的结尾。我试图从那些以off开头但后缀相同的单词中减去以on开头的单词。它将创建一个新字段,以dif_开头,然后是相同的后缀。这将是一个新的数据帧,我想使用一个带有列表的循环,因为变量的数量将增加

我试过:

calc_vars = ['calculated_3_things_swell',
'calculated_3_things_neap',
'calculated_3_things_kts',
'calculated_3_things_tov']

for i in calc_vars:
     df_diff['dif_' + str(i)] = df.['on_' + str(i)] - df.['off_' + str(i)]

但没有这样的运气


Tags: 数据df客户on单词事情后缀things
2条回答

像这样的

# setup
df = pd.DataFrame.from_records([
 {'string': 'on_calculated_3_things_swell'}, 
 {'string': 'on_calculated_3_things_neap'}, 
 {'string': 'on_calculated_3_things_kts'}, 
 {'string': 'on_calculated_3_things_tov'}, 
 {'string': 'on_calculated_churn_rate_fg2_perc'}, 
 {'string': 'off_calculated_3_things_swell'}, 
 {'string': 'off_calculated_3_things_neap'}, 
 {'string': 'off_calculated_3_things_kts'}, 
 {'string': 'off_calculated_3_things_tov'}, 
 {'string': 'off_calculated_churn_rate_fg2_perc'}])
df['data'] = np.random.rand(len(df))
df

                               string      data
0        on_calculated_3_things_swell  0.047960
1         on_calculated_3_things_neap  0.949035
2          on_calculated_3_things_kts  0.441468
3          on_calculated_3_things_tov  0.144224
4   on_calculated_churn_rate_fg2_perc  0.176003
5       off_calculated_3_things_swell  0.092168
6        off_calculated_3_things_neap  0.300117
7         off_calculated_3_things_kts  0.698156
8         off_calculated_3_things_tov  0.845363
9  off_calculated_churn_rate_fg2_perc  0.384454

# split and subtract
df[['on', 'suffix']] = df['string'].str.split('_', 1, expand=True)
g = df.groupby('on')
diff_series = g.get_group('on').set_index('suffix')['data'].sub(
    g.get_group('off').set_index('suffix')['data']
)
diff_series

suffix
calculated_3_things_swell        -0.044208
calculated_3_things_neap          0.648918
calculated_3_things_kts          -0.256689
calculated_3_things_tov          -0.701139
calculated_churn_rate_fg2_perc   -0.208452
Name: data, dtype: float64

# combine with original df
diff_df = pd.DataFrame({'data': diff_series, 'string': 'dif_' + diff_series.index})
df = pd.concat([df, diff_df], axis=0, join='inner').reset_index(drop=True)
df

                                string      data
0         on_calculated_3_things_swell  0.047960
1          on_calculated_3_things_neap  0.949035
2           on_calculated_3_things_kts  0.441468
3           on_calculated_3_things_tov  0.144224
4    on_calculated_churn_rate_fg2_perc  0.176003
5        off_calculated_3_things_swell  0.092168
6         off_calculated_3_things_neap  0.300117
7          off_calculated_3_things_kts  0.698156
8          off_calculated_3_things_tov  0.845363
9   off_calculated_churn_rate_fg2_perc  0.384454
10       dif_calculated_3_things_swell -0.044208
11        dif_calculated_3_things_neap  0.648918
12         dif_calculated_3_things_kts -0.256689
13         dif_calculated_3_things_tov -0.701139
14  dif_calculated_churn_rate_fg2_perc -0.208452

删除df['on_'...['off_'之间的点

此外,请确保它们是受支持的数据类型。如果其中任何一列是字符串类型,它将不起作用,您可以像这样将它们更改为数字

df["column_name"] = pd.to_numeric(df["column_name"])

相关问题 更多 >

    热门问题