熊猫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'“”
如果有人能指出我的方向是正确的,那真的很棒。 谢谢!
答
您的循环是一个好主意,但是你需要在新列创建熊猫系列是这样的:
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文件。 感谢您的所有建议!
你可以发布你想要的输出看起来像什么吗?我不清楚最终结果应该是什么 – johnchase
嗨,约翰,我正在为每列创建一个新的数据表单,并且它应该包含原始列c1 - cN和它旁边的计算值,例如,行号和c1的LOG。我试图在第二个代码片段中显示它 – RazzleDazzle