【发布时间】:2018-07-22 10:36:00
【问题描述】:
我使用pd.GetDummies 对我的分类变量进行热编码以用作预测变量。对于我的一些具有许多独特值的列,我有许多新列,并且我正在尝试找到一种快速的方法来为这些列创建交互项。 (我只想要我的一部分列的交互,所以PolynomialFeatures() 不会工作......或者会吗?)
这是我想要做的:
第 1 步:为我要相乘的每个子集创建列名列表:
channel = [col for col in df if col.startswith('channel')]
quote = [col for col in df if col.startswith('quote')]
print(channel[:1])
Out: 'channel_A'
'channel_B'
第二步:for循环:
cols = 'channel quote'.split()
for col in cols:
for i in col:
colname = 'value_X_'+i
df[colname] = df['value_days']*df[i]+0
问题是内部循环没有将col识别为一个对象:它把它识别为一个字符串(错误='c',证明为:
for col in cols:
for i in col:
print i
Out[1]:
c
h
.
.
.
o
t
e
目标:我想要的结果是获得一个新列,named 两列最初相乘,并具有 values乘法。
例如,channel中的第一个元素是channel_A,所以我想得到一个名为value_X_channel_A的新列,它的值应该等于value_days*channel_A的乘积。
value_days | channel_A | value_X_channel_A
-------------------------------------------
5 |5 |25
如果我只运行内部循环并将col 替换为channel,这将非常有效。
我怎样才能让它工作?
提前致谢。
【问题讨论】:
-
字符串是对象......并且您在字符串(即通道、引号)中迭代字符(即 c、h、a、n),您希望得到什么?
-
感谢您澄清@Marcus.Aurelianus。我编辑了这个问题来回答这个问题。
-
delete line 'for i in col:' ,然后试试?
-
感谢您的建议,但这并没有得到每列的唯一名称。那只会给我
channel,但实际的列名是channel_A、channel_B,等等。这就是内部循环的原因:我需要遍历以'channel'开头的列名列表。 -
好的,你很难使用 for 循环吗?您不能将处理放在一个函数中并将其应用于数据帧吗?