数据集优先/输出优先:
我需要迭代地删除多个数据点以获得斜率。注释部分说明删除哪些数据点以获得斜率。
我仅用于删除一个数据点的代码如下:
import numpy as np
import pandas as pd
from scipy import stats
df=pd.read_excel('I:/Python/Data/trial.xlsx')
grouped = df.groupby('TestEvent')
df["slope"] = np.NaN
for test_event, g in grouped:
print('TestEvent: {}'.format(test_event))
for i in g.index:
others = g.loc[g.index != i, ["x-axis", "y-axis"]]
slope, intercept, r_value, p_value, std_err = stats.linregress(others)
print ("slope", slope, 'for data without pair', i)
df.loc[i, "slope"] = slope
df.to_excel('trial4.xlsx')
使用上面的代码(n = 1),由于一次删除了一个数据点,我可以进入所有10个斜率。 __ 现在,我需要删除两个数据点(或n> 1),并对两个序列(111和112)保持一个恒定,如图中所示。
每个序列最终将给出90个斜率数据点(0,.... 9重复9次)。
最后,在输出数据框中,每个序列将有90个斜率值。
在所有最终数据帧中,斜率均为180(对于序列111和112)
感谢您的阅读。在这方面的任何帮助深表感谢。
答案 0 :(得分:0)
使用itertools.combinations
获取每种情况下要删除的行的列表。
import numpy as np
import pandas as pd
from itertools import combinations
...
slopes = pd.DataFrame(columns=["Test Event", "Removed 1", "Removed 2", "Slope"])
for test_event, g in grouped:
print('TestEvent: {}'.format(test_event))
for rows_to_drop in combinations(g.index, 2):
others = g[["x-axis", "y-axis"]].drop(list(rows_to_drop))
slope, intercept, r_value, p_value, std_err = stats.linregress(others)
print ("slope", slope, 'for data without rows', rows_to_drop)
slopes.append({"Test Event": test_event,
"Removed 1": rows_to_drop[0],
"Removed 2": rows_to_drop[1],
"Slope": slope}])
请注意,每个序列只有45个唯一值,而不是90,因为删除(0,1)与删除(1,0)相同。它将斜率存储在单独的新数据框中。