熊猫dataframe:在列上执行计算

问题描述:

新的熊猫和新的stackoverflow(真的),任何建议,非常感谢!熊猫dataframe:在列上执行计算

我有这样的数据帧DF:

  col1  col2  col3 
Date           
2017-08-24 100  101  105 
2017-08-23 102  102  107 
2017-08-22 101  100  106 
2017-08-21 103  99  106 
2017-08-18 103  98  108 
... 

现在我想与每一列,例如的值执行一些计算计算每个值的对数。

我认为这是一个好主意,循环的列和创建一个新的临时数据框与结果列。 这个新的数据帧应该是这样的。例如:

  col1  RN  LOG 
Date           
2017-08-24 100  1  2 
2017-08-23 102  2  2,008600 
2017-08-22 101  3  2,004321 
2017-08-21 103  4  2,012837 
2017-08-18 103  5  2,012837 

所以,我想这个for循环:

for column in df: 
    tmp_df = df[column] 
    tmp_df['RN'] = range(1, len(tmp_df) + 1) # to create a new column with the row number 
    tmp_df['LOG'] = np.log(df[column]) # to create a new column with the LOG 

然而,这并不打印旁边COL1新列,但有以下其他。结果是这样的:

Name: col1, Length: 86, dtype: object 
Date 
2017-08-24 00:00:00            100 
2017-08-23 00:00:00            102 
2017-08-22 00:00:00            101 
2017-08-21 00:00:00            103 
2017-08-18 00:00:00            103 
RN,"range(1, 86)" 
LOG,"Date 
2017-08-24 2 
2017-08-23 2,008600 
2017-08-22 2,004321 
2017-08-21 2,012837 
2017-08-18 2,012837 

00:00:00加入在第一部分的日期......

我也尝试过一些与分配:

tmp_df = tmp_df.assign(LN=np.log(df[column])) 

但这结果为“AttributeError:”'Series'object has no attribute'assign'“”

如果有人能指出我的方向是正确的,那真的很棒。 谢谢!

+0

你可以发布你想要的输出看起来像什么吗?我不清楚最终结果应该是什么 – johnchase

+0

嗨,约翰,我正在为每列创建一个新的数据表单,并且它应该包含原始列c1 - cN和它旁边的计算值,例如,行号和c1的LOG。我试图在第二个代码片段中显示它 – RazzleDazzle

您的循环是一个好主意,但是你需要在新列创建熊猫系列是这样的:

for column in df: 
    df['RN ' + column] = pd.Series(range(1, len(df[column]) + 1)) 
    df['Log ' + column] = pd.Series(np.log(df[column])) 

现在我想通了。 :)

import pandas as pd 
import numpy as np 
... 
for column in df: 
    tmp_res=pd.DataFrame(data=df[column]) 
    newcol=range(1, len(df) + 1) 
    tmp_res=tmp_res.assign(RN=newcol) 
    newcol2=np.log(df[column]) 
    tmp_res=tmp_res.assign(LN=newcol2) 

这将打印彼此相邻的所有列:

  col1  RN  LOG 
Date           
2017-08-24 100  1  2 
2017-08-23 102  2  2.008600 
2017-08-22 101  3  2.004321 
2017-08-21 103  4  2.012837 
2017-08-18 103  5  2.012837 

现在我可以去处理它们或把它们都放在一个CSV/Excel文件。 感谢您的所有建议!