我正在用Python和Pandas(两者都是新手)来设置我的第一个分析,关于如何正确地设置它有一些问题。在
本质上,我试图从时间序列中观察用户行为,但我的用户数量超过了天,所以我尝试每月查看一次。我用这种方式构建了DataFrame
:
df2 = pd.DataFrame({'ID':range(100)})
df2['Day1'] = random.sample(xrange(1000), 100)
df2['Day2'] = random.sample(xrange(1000), 100)
df2['Day3'] = random.sample(xrange(1000), 100)
我尝试了几种方法将索引添加到“ID”列中,但1)不确定是否需要它;2)我的任何方法都无法接受。以下是我尝试过的:
^{pr2}$我试图创建一个新数据帧的最终输出,它将显示第2天的值是否比第1天少95%,第3天是否比第2天低95%(假设我有100列的DataFrame
)。输出结果可能如下所示:
ID Day2 Day3
1 NaN 1
2 NaN NaN
3 NaN NaN
4 1 NaN
我认为确定这一点的适当方法是使用如下方法运行for循环:
for i in df2:
if (Day2-Day1)/Day1 < .95:
print 1
但是,我不确定如何在函数中引用列,也不确定如何使该函数灵活地包含DataFrame
中的所有列。我应该如何引用这个函数的列?在
我应该如何引用这个函数的列?在
由于pandas的当前形式假定时间序列数据在索引中是按时间排列的,而不是在列中,因此至少暂时地将数据帧转置将允许使用许多内置方法,例如
shift
/diff
/pct_change
/等可能有一种更简单的方法来使用面板来实现这一点,但我还没有任何时间序列方面的经验。这就是我如何使用数据帧完成您想要的:
首先制作一个虚拟的
DataFrame
:现在,通过删除
^{pr2}$df2
的第一列来创建一个新的DataFrame
ix表示法允许对列进行切片。一开始可能会让人困惑,但它的英文意思是:“从1到结尾只取所有行和列”。在
此时,两个
DataFrames
具有相同的索引。你不需要创建你自己的“ID”,除非你需要它做其他事情。熊猫会自动为你索引每个DataFrames
。这将对齐各种操作的DataFrames
。它对列也有同样的作用。它将按列名排列DataFrames
,并执行您想要的任何操作。由于要除以“下一天”,我们必须更改df3
中的列:现在我们已经重命名了列,这样它们就可以按照我们想要的方式对齐。执行除法计算很容易,因为熊猫会完成所有的排列。不需要循环!在
相关问题 更多 >
编程相关推荐