パンダとの重合データパケット

序文

パケットデータ集約で動作がリレーショナルまたは非リレーショナルデータベースの数に関与している、実質的原理は類似しており、取得されたデータフィールドへの1つ以上のパケットサービスに応じて重合操作や動作は、非常にPANDASを提供しますフレンドリーパケット集約機能、技術が容易異なる寸法の重合のデータ・パケット・オペレーションを使用することができ

APIの簡単な説明

データフレームのデータ構造

import numpy as np
import pandas as pd

df=pd.DataFrame({'key1':['a','a','b','b','a'],
                 'key2':['one','two','one','two','one'],
               'data1':np.random.randn(5),
               'data2':np.random.randn(5)})
print(df)

結果は
ここに画像を挿入説明

図1に示すように、フィールドグルーピング

#通过key1分组
grouped = df.groupby(by='key1')
print(grouped)
print(type(grouped))

for i in grouped:
    print(i)
    print("-"*50)

検索結果表示
ここに画像を挿入説明

オブジェクトのグループを取得するパケットのフィールド、このパケットの目的、PANDAS方法が操作(機能)の一連を提供し、使用が直接使用することができる、ウサギより平均化平均、統計カウント、等

グループオブジェクトを介してトラバースし続け、それぞれの値を見つけることができるだけでなく、タプルのグループは、名前がパケットの名前であり、行の値は、グループは、さまざまな操作を得ることができ

カラムの平均値を求めます

#求data1平均值
mean_data1 = grouped['data1'].mean()
print(mean_data1)

ここに画像を挿入説明
図2に示すように、パケットの複数のフィールド

#获取多个分组,并计算平均值
multi_group = df.groupby(by=[df['key1'],df['key2']])['data1'].count()
print(multi_group)

または、次のように書くことができます

multi_group = df.groupby(by=['key1','key2'])['data1'].count()
print(multi_group)

ウェルは、一般に、行および列のデータまたはデータ保全性の最後の層こと、階層関係なく、分割されたグループの数の、大寸法より小さい寸法に分割される複数のパケットを理解しました最初のパケットによれば、上記、KEY1およびKEY2などのデータをフェッチし、行DATA1パケット統計からデータを取得するために下の層に続いて
ここに画像を挿入説明

もちろん、最終的には以下が書き込みすることも可能であるので、背面に配置することができEDITORIALをすることができ、その列の統計に行ってきました

multi_group_names = df['data1'].groupby(by=[df['key1'],df['key2']]).count()
print(multi_group_names)

ここに画像を挿入説明

重要な注意:
上記のグループ化の操作は、最終的にグループ化されたオブジェクトを取得するには、我々が得る実際には、一連のタイプがあるときに、当然のことながら、データフレームのタイプすることができ、異なるものになるオブジェクトの操作をグループ化するための機能の種類を取得するには、オブジェクトをグループ化し、このようにして次の例では、タイプの結果を得ることが可能であるデータフレーム

multi_group_names = df[['data1']].groupby(by=[df['key1'],df['key2']]).count()
print(type(multi_group_names))
print(multi_group_names)

ここに画像を挿入説明

データ集約
重合は、スカラー値のアレイからのデータを生成することができる任意の変換プロセスを指します。例:平均、カウント数、分のようにまとめます。多くの一般的な集計操作を実現するためのデータ収集、統計情報の最適化を計算するための場所では、しかし、これらのメソッドを使用するだけではないです。あなたは、重合操作も定義されている任意のオブジェクトのグループ化方法で呼び出すことができます定義することができます。例えば、位数分位シリーズサンプルは、算出または列データフレームもよいです

図1に示すように、変位値のグループ化されたDATA1 KEY1を算出した後(0.9)値

grouped=df.groupby('key1')
print(grouped)  #返回groupby对象
print(grouped['data1'].quantile(0.9))

ここに画像を挿入説明

図2に示すように、自己重合の関数定義、単に集合体又は方法AGGに渡し

grouped=df.groupby('key1')

#自定义函数
def peak_to_peak(arr):
    return arr.max()-arr.min()
print(grouped.agg(peak_to_peak))

ここに画像を挿入説明
注:遅く非常に大きい最適化機能、経由よりもカスタム関数ので、オーバーヘッド(関数呼び出し/などのデータ並べ替え)、中間パケットデータブロックの建設に注意ので、いくつかの特別なサービスでシーンは非常に有効です

ケースを説明します

エクセル2019全国の大学を使用して、データの次の表は、分析の使用に関連している、に示されているデータの一部の傍受
ここに画像を挿入説明
、この表は、2019各州、各県で異なる都市、ランクの大学やその他の情報フィールド以下は、いくつかの簡単なニーズによって言われました

1、各県の大学の数を数えます

iopath = './全国高校名单excel版(2019).xlsx'
df = pd.read_excel(iopath,sheet_name='全国高校')

#统计各个身份的大学,首先根据省进行分组,得到分组的对象
#得到的分组对象是一个元祖,由于元祖是可迭代的对象,一个是分组名称,一个是dataFrame对象,
# 然后就可以使用分组相关的函数进行后续操作了
grouped = df.groupby(by="province")
print(grouped['universityName'].count())

2、河北省の大学の数を数えます

group_count = df.groupby(by="province")['universityName'].count()['河北省']
print(group_count)

3、省の一つで、大学の数を数えます

hebei_data = df[df['province'] == '河北省']
print(hebei_data['universityName'].count())

4、様々市、河北省の下での大学の数

hebei_data = df[df['province'] == '河北省']
city_grouped = hebei_data.groupby(by='city')
print(city_grouped.count()['universityName'])

ここに画像を挿入説明

5、各県のマルチフィールドパケット統計、各県の大学の数は、次の

multi_group = df.groupby(by=['province','city'])['universityName'].count()
print(multi_group)

ここに画像を挿入説明

上記マルチフィールドパケットによれば、以下のようにそのため、書くことができます。

multi_group_names = df['universityName'].groupby(by=[df['province'],df['city']]).count()
print(multi_group_names)

描きます

分析と統計の後、一般的な結果を示す図面が必要です、国の異なる地方によって取得された上記の大学の次の番号は、だけでなく、河北省グラフィック表示の大学の数を取得します

大学の数図1、国の異なる地方

import pandas as pd
from matplotlib import pyplot as plt

iopath = './全国高校名单excel版(2019).xlsx'
df = pd.read_excel(iopath,sheet_name='全国高校')
print(df.head(2))

#避免中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#呈现出全国省份排名前10的高校数量
grouped = df.groupby(by='province').count()['universityName'].sort_values(ascending=False)[:10]
print(grouped)
_x = grouped.index
_y = grouped.values
plt.bar(range(len(_x)),_y)
plt.xticks(range(len(_x)),_x)
plt.show()

レンダリングを表示します
ここに画像を挿入説明

2、河北省、異なる領域マップ内の大学の数

#展示出河北省的每个城市的高校数量
df = df[df['province']=='河北省']
grouped = df.groupby(by='city').count()['universityName'].sort_values(ascending=False)
# 设置中文显示字体,避免乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
print(grouped)
_x = grouped.index
_y = grouped.values
plt.bar(range(len(_x)),_y,width=0.3,color='orange')
plt.xticks(range(len(_x)),_x)
plt.show()

描画のグラフィックの詳細はあまり話をしない、ここで改善し続けることができます

Benpianこれは非常に重要なパンダの内容で、無料のフォローアップは、綿密な研究を行うことを続ける簡単な説明、および集計操作を行うために、パケットの一般的な動作を中心に、オーバー基本的に、そして最終的には、見ていてくれてありがとう!

彼は191元記事に公開 ウォン称賛99 ビュー210 000 +を

おすすめ

転載: blog.csdn.net/zhangcongyi420/article/details/103964075