我有16列。我想将每个count
列划分为各自的dc(uid)
列。
+------------------------+------------------------------+--------------------------+------------------------------------+-------------------------------------+------------------------+---------------------+--------------------------+--------------------------------+----------------------------+--------------------------------------+---------------------------------------+--------------------------+-----------------------+
| count: interaction_eis | count: interaction_eis_reply | count: interaction_match | count: interaction_single_message_ | count: interaction_single_message_1 | count: interaction_yes | count: revenue_sale | dc(uid): interaction_eis | dc(uid): interaction_eis_reply | dc(uid): interaction_match | dc(uid): interaction_single_message_ | dc(uid): interaction_single_message_1 | dc(uid): interaction_yes | dc(uid): revenue_sale |
+------------------------+------------------------------+--------------------------+------------------------------------+-------------------------------------+------------------------+---------------------+--------------------------+--------------------------------+----------------------------+--------------------------------------+---------------------------------------+--------------------------+-----------------------+
我知道我可以这样做:
pre_purch_m['interaction_eis_rate'] = pre_purch_m['count: interaction_eis'] / pre_purch_m['dc(uid): interaction_eis']
pre_purch_m['interaction_eis_reply_rate'] = pre_purch_m['count: interaction_eis_reply'] / pre_purch_m['dc(uid): interaction_eis_reply']
但这样做8次似乎多余而且费力。
是否有熊猫功能或范例以更有效的方式完成这样的事情?
答案 0 :(得分:2)
让我们假设您的列是一致的。这是一种方法。
从数据框df
获取列。
cols = df.columns
通过删除count:
和dc(uid):
并获取唯一列表来获取唯一列。
uniq_cols = list(set([x.split(': ')[1] for x in cols]))
现在,循环创建新列。
for col in uniq_cols:
df[col + '_rate'] = df['count: ' + col] / df['dc(uid): ' + col]
而且,如果最初通过存储这些uniq_cols
来填充数据框会更容易。
答案 1 :(得分:0)
16列是连续的,所以有一种方法可以做到这一点:
newdF = df[range(8)]/df[range(8, 16)].values
使用.values
来阻止重新编制索引。
然后重命名列:
newdF.rename(columns = lambda x : x.replace(x, x[6:] + '_rate'), inplace='True')