df=pd.read_excel(filename,sheet_name='Sheet1')
Num = df['历史风暴_编号']
Lon = df['历史风暴_经度(°)']
Lat = df['历史风暴_纬度(°)']
你的需求应该是对数据做一定处理,接着根据num,获取经度纬度。如果是分组,那么一定涉及到统计(按编号分组后求经度纬度的最大值,最小值,平均值)
你的需求显然不是获取min,max,count,mean这些的,因此只需要排序后做条件索引就可以了,不一定要分组。
我的代码:
import pandas as pd
if __name__ == '__main__':
# 读取excel数据
df = pd.read_excel('F:\position.xlsx')# 你的excel地址
# 排序
df2 = df.sort_values(by=['编号'], ascending=False)
# 获取所有索引
all_index = df.pivot_table(index=['编号']).index
# 遍历每一编号
for index in all_index:
# 条件索引获取分组数据
print('编号%s的数据为:' % index)
print(df2[df2['编号']==index])
运行结果:
您的采纳就是对我最大的动力,谢谢!!!
第1~8和第16~22行序号都是0这种情况要算成一个吗。
要是算了就很简单直接合并就可以。
要是不算也不难,直接循环和上一项编号相同就合并编号不同就新分一组
使用df.groupby('历史风暴_编号')函数即可实现你的功能,更多关于函数的功能可参见这篇文章https://zhuanlan.zhihu.com/p/149126583
如果有用,请点击采纳,谢谢。
import pandas as pd
# df=pd.read_excel(filename,sheet_name='Sheet1')
# print(df)
# Num = df['历史风暴_编号']
# Lon = df['历史风暴_经度(°)']
# Lat = df['历史风暴_纬度(°)']
# df
# 第1~8行分为一组,第9~15行分为一组,第16~22分为一组
g1=df.iloc[:8,:]
g2=df.iloc[8:16,:]
g3=df.iloc[16:,:]
# 能根据编号的不同,分为Num1、Num2、Num3
features=df["Num"]
gd = pd.get_dummies(features,prefix="Num",prefix_sep="_")
# print(gd)
# Num_0 Num_1 Num_2
# 0 1 0 0
# 1 1 0 0
# 2 1 0 0
# 3 0 1 0
# 4 0 1 0
# 5 0 0 1
# 6 0 0 1
没见你的判断条件,但是可以用df[“列名”].apply(lamda x if x> 具体的数)
这个语句不完整,lamda里需要写你具体的判断条件才能用。