Python 如何使用数据帧将此计算推广到任意数量的列?
我有一个包含一些数据的文件Python 如何使用数据帧将此计算推广到任意数量的列?,python,pandas,numpy,Python,Pandas,Numpy,我有一个包含一些数据的文件 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 我可以处理这些数据并对其进行数学运算: import sys import numpy as np import pandas as pd def main(): if(len(sys.argv) != 2): print "Takes one filename as argument" sys.exit() file_name = sys.argv[
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
我可以处理这些数据并对其进行数学运算:
import sys
import numpy as np
import pandas as pd
def main():
if(len(sys.argv) != 2):
print "Takes one filename as argument"
sys.exit()
file_name = sys.argv[1]
data = pd.read_csv(file_name, sep=" ", header=None)
data.columns = ["timestep", "mux", "muy", "muz"]
t = data["timestep"].count()
c = np.zeros(t)
for i in range(0,t):
for j in range(0,i+1):
c[i-j] += data["mux"][i-j] * data["mux"][i]
c[i-j] += data["muy"][i-j] * data["muy"][i]
c[i-j] += data["muz"][i-j] * data["muz"][i]
for i in range(t):
print c[i]/(t-i)
上面我的示例输入的预期结果是
42.5
62.0
84.5
110.0
这个数学是为我的数据找到时间相关函数,它是每列中乘积对的所有排列的时间平均值。
我想把这个程序推广到
- 处理
列数(例如在i/j循环中),以及n
- 能够从文件中读入列名,以免硬编码
我可以使用哪种
numpy
或pandas
方法来实现这一点?我们可以将其简化为一个循环,因为我们可以使用数组切片,并使用sum
ufunc沿数据帧的行进行操作,因此在这个过程中,它可以覆盖任意数量的列,就像这样-
a = data.values
t = data["timestep"].count()
c = np.zeros(t)
for i in range(t):
c[:i+1] += (a[:i+1,1:]*a[i,1:]).sum(axis=1)
解释
1) a[:i+1,1:://code>是所有行的切片,直到i+1
第行和从第二列开始的所有列,即mux
,muy
等等
2) 类似地,对于[i,1:://code>,这是第i行和从第二列开始的所有列
要保持“熊猫方式”,只需将a[
替换为data.iloc即可[
感谢您提供相关的代码示例,但是您能否提供您试图应用的公式的简要说明以及所提供示例数据的预期输出?如果文件没有列名或任何可以解释为列名的内容,pandas无法确定列名。也可以作为@vealkind说,如果你能简单地描述一下数学公式,可能有人能帮上忙。@vealkind更改已添加,如果还有其他问题,请告诉我missing@HarvIpan要在文件中包含列名,我是否使用字段名=推断?如果有麻烦的话,我很抱歉,但是您能解释一下切片如何用于数组索引吗?我不熟悉这并没有说明你在这里用它们做什么unfortunately@Luciano补充了一些解释。