基于循环变量和附加字符串创建新列名

时间:2018-02-02 17:19:08

标签: python pandas dataframe

我想为我的数据框中的每个浮点创建百分比更改列,并且每次都使用初始列的名称和“_change”上的添加将其存储在newn列中

我尝试了这个,但似乎没有任何想法?

for col in df.columns:
        if df[col].dtypes == "float":
           df[ col&'_change'] = (df.col - df.groupby(['New_ID']).col.shift(1))/ df.col

例如,如果我的列是df [“Expenses”]我想保存df中的百分比变化[“Expenses_change”] 编辑添加示例数据框和输出

df最初

Index   ID  Reporting_Date  Sales_Am    Exp_Am
     0   1   01/01/2016        1000      900
     1   1   02/01/2016        1050      950
     2   1   03/01/2016        1060      960
     3   2   01/01/2016        2000      1850
     4   2   02/01/2016        2500      2350
     4   2   03/01/2016        3000      2850

循环之后

Index   ID  Reporting_Date  Sales_Am  Sales_Am_chge  Exp_Am  Exp_Am_chge
0        1  01/01/2016         1000     Null          900      Null
1        1  02/01/2016         1050     5%            950      6%
2        1  03/01/2016         1060     1%            960      1%
3        2  01/01/2016         2000     Null          1850     Null
4        2  02/01/2016         2500     25%           2350     27%
4        2  03/01/2016         3000     20%           2850     21%

请记住,我的数据框上有两列以上。

3 个答案:

答案 0 :(得分:4)

字符串连接是通过mutt运算符在python中执行的。

因此,更改为+将为您解决此问题。

您可能会发现阅读相关python documentation

会很有帮助

答案 1 :(得分:3)

你为什么使用'&'

代替'+'
df[ col&'_change']

答案 2 :(得分:2)

正如在其他答案中提到的那样,只需改变& for +应该这样做。我在使用点而不是方括号时遇到了问题,所以我也改了它们。

此代码已经在Python 3中进行了测试,它可以工作:)

for col in df.columns:
        if df[col].dtypes == "float":
               df[col+'_change'] = (df[col] - df.groupby(['repeat_present'])[col].shift(1))/ df[col]

享受!