python 表格数据分组

刚学python,遇到个这样的问题:把下面的表格数据进行分组,根据左边 历史风暴_编号,编号相同的分为一组。第1~8行分为一组,第9~15行分为一组,第16~22分为一组。利用pandas读取,Num为所有编号,Lon为所有经度,Lat为所有纬度。

df=pd.read_excel(filename,sheet_name='Sheet1')
Num = df['历史风暴_编号']
Lon = df['历史风暴_经度(°)']
Lat = df['历史风暴_纬度(°)']

img

我想要达到的结果:能根据编号的不同,分为Num1、Num2、Num3,相应的Lon也分为Lon1、Lon2、Lon3,Lat也分为Lat1、Lat2、Lat3

你的需求应该是对数据做一定处理,接着根据num,获取经度纬度。如果是分组,那么一定涉及到统计(按编号分组后求经度纬度的最大值,最小值,平均值)
你的需求显然不是获取min,max,count,mean这些的,因此只需要排序后做条件索引就可以了,不一定要分组。

img

我的代码:

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])

运行结果:

img

您的采纳就是对我最大的动力,谢谢!!!

img

第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里需要写你具体的判断条件才能用。