2 回答
TA贡献1770条经验 获得超3个赞
避免可变数量的变量
改用字典。例如,您可以使用itertools.count为连续的数据帧生成键,并pd.Series.diff确定在何处进行拆分的索引。拆分本身可以使用 进行处理np.split。
from itertools import count
c = count()
dfs = {}
c_valid = df['C'].notnull()
dfs[next(c)] = df[c_valid]
split_indices = np.where(df.loc[~c_valid, 'A'].diff() > 10)[0]
for df_split in np.split(df[~c_valid], split_indices):
dfs[next(c)] = df_split
结果:
print(*dfs.items(), sep='\n'*2)
(0, A B C
0 NaN NaN 9.0
1 NaN NaN 9.0)
(1, A B C
2 1.0 5.0 NaN
3 2.0 6.0 NaN)
(2, A B C
4 100.0 7.0 NaN
5 101.0 8.0 NaN)
TA贡献1806条经验 获得超8个赞
当您划分两个数据帧时,索引会得到保留,如果您打印第二个数据帧,您会看到索引中没有“1”:
df2
>> A B C
4 100 7.0 NaN
5 101 8.0 NaN
您可以使用iloc访问第一行:
df2.iloc[0]
>>A 101.0
B 8.0
C NaN
Name: 5, dtype: float64
另外,一条建议:避免for在熊猫中使用。对于您的情况,.diff如果要在“A”跳转时拆分数据库,请使用:
ix=df[df.diff()['A']>10].index[-1]
ix
>> 4
df1, df2 = df.loc[:ix-1], df.loc[ix:]
添加回答
举报