Pandas进阶修炼120题-第五期(一些补充,101-120题)

目录

    • 往期内容:
    • 第一期:Pandas基础(1-20题)
    • 第二期:Pandas数据处理(21-50题)
    • 第三期:Pandas金融数据处理(51-80题)
    • 第四期:当Pandas遇上NumPy(81-100题)
    • 第五期:一些补充(101-120题)
    • 第五期 一些补充
      • 101.从CSV文件中读取指定数据
      • 102.从CSV文件中读取指定数据
      • 103.从上一题数据中,对薪资水平列每隔20行进行一次抽样
        • 其他采样示例
      • 104.将数据取消使用科学计数法
        • 标准答案:round方法,实际上修改了数据值,谨慎使用
        • 推荐方法:pd.set_option('display.float_format')
        • 两种方法的区别
      • 105.将上一题的数据转换为百分数
        • 标准答案:df.style.format()方法 不会更改数据
        • 直接修改法:当数据类型为numpy.ndarray时 会更改数据本身
        • 直接修改法2:当数据类型为dataframe时 会修改数据本身
        • 再拓展 : "{:.2f}%".format(p) 与'{0:.2%}'.format(p)
      • 106.查找上一题数据中第3大值的行号
        • 方法一:
        • 方法二:
      • 107.反转df的行
        • 方法一:
        • 方法二:本质是和方法一一样,但是有个容易忽略的点
      • 108.按照多列对数据进行合并
      • 109.按照多列对数据进行合并
      • 110.再次读取数据1并显示所有的列
        • 拓展:pd.set_option("display.max_columns", None)
      • 111.查找secondType与thirdType值相等的行号
        • 方法一:布尔索引
        • 方法二:loc方法
        • 方法三:np.where()
      • 112.查找薪资大于平均薪资的第三个数据
        • 方法一:找到薪资大于均值的数据,选择第三个
        • 方法二:np.argwhere()
      • 113.将上一题数据的salary列开根号
      • 114.将上一题数据的linestaion列按_拆分
      • 115.查看上一题数据中一共有多少列
      • 116.提取industryField列以'数据'开头的行
      • 117.按列制作数据透视表
      • 118.同时对salary、score两列进行计算
      • 119.对salary求平均,对score列求和
      • 120.计算并提取平均薪资最高的区

自己再写一遍的pandas习题,相比于标准答案添加了自己的理解与注释,也可直接下载链接上的原习题(未加注释的初始版带答案)
链接:https://pan.baidu.com/s/1arrqcBFZKqJngzRzUB2QfA?pwd=29eb
提取码:29eb
–来自百度网盘超级会员V3的分享

往期内容:

第五期 一些补充

import numpy as np
import pandas as pd

101.从CSV文件中读取指定数据

# 备注:从数据1中的前10行中读取positionName, salary两列
df = pd.read_csv('pandas120_101_120_1.csv',encoding = 'gbk',usecols=['positionName','salary'],nrows=10)
df
positionNamesalary
0数据分析37500
1数据建模15000
2数据分析3500
3数据分析45000
4数据分析30000
5数据分析50000
6数据分析30000
7数据建模工程师35000
8数据分析专家60000
9数据分析师40000

102.从CSV文件中读取指定数据

# 备注:从数据2中读取数据并在读取数据时将薪资大于10000的为改为高
df = pd.read_csv('pandas120_101_120_2.csv',converters={'薪资水平':lambda x: '高' if float(x) > 10000 else '低'})
df
学历要求薪资水平
0本科
1硕士
2本科
3本科
4不限
.........
1149硕士
1150本科
1151本科
1152本科
1153本科

1154 rows × 2 columns

converters:是一个参数,允许你为某些列定义转换函数,这个函数会在读取数据时应用

使用方法:

  • 以字典键值对的形式出现.
  • 键是你想要做出修改的列名,本例中键是 “薪资水平”
  • 值就是一个 lambda 函数.

本例中:

  • x “薪资水平” 这一列的一个值.
  • float(x) 将x转化为浮点类型.
  • 检查 x 代表的值是否大于 10,000.
  • 如果是, 返回字符串 ‘高’.
  • 如果不是, 返回字符串 ‘低’.

其他用法示例:

1:将字符串日期转换为真正的日期:

converters={'date_column': pd.to_datetime}

2:将某些特定的字符串值映射为 NaN:

converters={'some_column': lambda x: np.nan if x == 'unknown' else x}

3:对数值数据进行缩放:

converters={'value_column': lambda x: float(x) / 1000}

当使用 pandas 读取数据时,其他一些参数可以在加载数据时进行筛选或处理。以下是一些这样的参数及其功能:

  1. dtype:

    • 用于指定列的数据类型。
    • 例如,你可以使用 dtype={'column_name': int} 来确保特定的列为整数类型。
  2. usecols:

    • 允许你选择要加载的列。
    • 例如,usecols=['A', 'C'] 只会加载名为 ‘A’ 和 ‘C’ 的列。
  3. skiprows:

    • 允许你跳过文件的前几行。
    • 如果你知道前两行是无关的标题或其他信息,你可以使用 skiprows=2 来跳过它们。
  4. nrows:

    • 指定要读取的行数。
    • 如果你只想加载文件的前 100 行,可以使用 nrows=100
  5. na_values:

    • 指定应被解释为 NaN(即缺失数据)的值。
    • 例如,如果你的数据集中使用 “unknown” 或 “-” 表示缺失值,你可以使用 na_values=['unknown', '-']
  6. parse_dates:

    • 尝试将数据解析为日期。
    • 可以指定要解析为日期的列,例如 parse_dates=['date_column']
  7. date_parser:

    • 用于解析日期的函数。
    • 当与 parse_dates 一起使用时,它可以自定义日期解析的方式。
  8. skipfooter:

    • 跳过文件的最后几行。
    • 如果你知道文件的最后三行是汇总或其他不需要的信息,你可以使用 skipfooter=3
  9. squeeze:

    • 如果解析的数据只有一列,则返回 Series 而不是 DataFrame。
    • 设置为 True 时,如果数据只有一列,将返回一个 Series 对象。

这些参数都可以帮助你在加载数据时根据需要对数据进行预处理和筛选。当然,这只是其中的一部分参数,pandas 为数据加载提供了丰富的选项。你可以参考 pandas 官方文档来了解更多详细信息。

103.从上一题数据中,对薪资水平列每隔20行进行一次抽样

df.iloc[::20,:][['薪资水平']]
薪资水平
0
20
40
60
80
100
120
140
160
180
200
220
240
260
280
300
320
340
360
380
400
420
440
460
480
500
520
540
560
580
600
620
640
660
680
700
720
740
760
780
800
820
840
860
880
900
920
940
960
980
1000
1020
1040
1060
1080
1100
1120
1140
其他采样示例

以下是一些常用的采样方法:

  1. 随机采样:
    使用 DataFrame 的 sample() 方法,你可以轻松地进行随机抽样。

    # 抽取 10% 的数据
    sample_df = df.sample(frac=0.1)# 或者直接抽取 10 行数据
    sample_df = df.sample(n=10)
    
  2. 分层采样:
    如果你想根据某个特定的列进行分层抽样,你可以使用 groupby 配合 sample。例如,假设你想根据 “薪资水平” 列进行分层,每层抽取 5 个样本:

    sample_df = df.groupby('薪资水平').apply(lambda x: x.sample(n=5)).reset_index(drop=True)
    
  3. 时间序列数据的采样:
    如果你的数据是时间序列数据,你可能会想要按特定的频率进行采样。这时,你可以使用 resample 方法。

    # 假设 'date' 是一个日期列,并且已经被设置为索引
    # 以下代码每月抽取最后一个观测值
    sample_df = df.resample('M').last()
    
  4. 系统采样:
    你已经看到了如何使用 iloc 进行系统采样(例如每隔 20 行)。这是一种简单且常用的方法。

  5. 权重采样:
    如果你希望根据某列的值作为权重进行抽样,你可以使用 sample 方法的 weights 参数。

    # 假设 'weights_column' 是权重列
    sample_df = df.sample(n=10, weights='weights_column')
    
  6. 条件采样:
    你可以使用布尔索引来根据某些条件对数据进行筛选。

    # 例如,选择所有薪资大于 10000 的行
    high_salary_df = df[df['薪资水平'] > 10000]
    

选择哪种抽样方法取决于你的具体需求和数据的特性。在实际应用中,可能需要结合多种方法来达到理想的抽样效果。

104.将数据取消使用科学计数法

df = pd.DataFrame(np.random.random(10)**10,columns = ['column1'])
df
column1
01.265021e-08
17.763215e-05
25.331380e-01
33.177901e-07
41.341835e-03
51.488887e-05
63.226127e-12
71.604492e-08
81.836409e-01
94.988592e-02
标准答案:round方法,实际上修改了数据值,谨慎使用
df.round(5)
column1
00.00000
10.00008
20.53314
30.00000
40.00134
50.00001
60.00000
70.00000
80.18364
90.04989
推荐方法:pd.set_option(‘display.float_format’)
# 设置展示方式
pd.set_option('display.float_format','{:.10f}'.format)
df
column1
00.0000000127
10.0000776321
20.5331379960
30.0000003178
40.0013418353
50.0000148889
60.0000000000
70.0000000160
80.1836408734
90.0498859185
# 重置展示方式
pd.reset_option('display.float_format')
两种方法的区别

这里我们看到了两列的对比:

  1. display_setting 列:这列展示了在应用 pd.set_option('display.float_format', '{:.10f}'.format) 设置后的数据显示效果。所有的浮点数都显示为10位小数,但实际的数据值没有改变。

如果您想要取消之前设置的 display.float_format 选项并恢复到 Pandas 的默认显示设置,您可以使用 pd.reset_option() 方法。具体来说,为了重置浮点数的显示格式,可以这样做:

pd.reset_option('display.float_format')

执行上述代码后,Pandas 将不再使用您之前设置的浮点数格式,并恢复为默认的显示设置。

  1. rounded 列:这列展示了在应用 df.round(5) 后的数据。这是DataFrame中的实际数据,四舍五入到了5位小数。

从这个对比中,您可以看到这两个操作在这个特定的DataFrame上产生了相同的显示效果。但重要的是要记住,它们在操作和目的上是完全不同的。pd.set_option 只更改显示,而 df.round 更改实际数据。

105.将上一题的数据转换为百分数

df
column1
01.265021e-08
17.763215e-05
25.331380e-01
33.177901e-07
41.341835e-03
51.488887e-05
63.226127e-12
71.604492e-08
81.836409e-01
94.988592e-02
标准答案:df.style.format()方法 不会更改数据
df.style.format({'column1':'{0:.2%}'.format})
 column1
00.00%
10.01%
253.31%
30.00%
40.13%
50.00%
60.00%
70.00%
818.36%
94.99%

这是一个很好的方式来格式化 pandas DataFrame 的显示样式,而不真正更改 DataFrame 中的数据。

代码解析:

  1. 使用 df.style.format() 来更改 DataFrame 的显示样式。
  2. 通过传递一个字典 { 'data': '{0:.2%}'.format } 来指定列 'data' 的格式。
  3. 字符串 '{0:.2%}' 是一个格式字符串,它会将数值转换为百分数并保留两位小数。
    • .2% 是一个特殊的格式,它会自动将数字乘以 100 并添加百分号,这意味着不需要额外的乘以 100 的操作。
  4. .format 是一个方法,它将被应用于列 'data' 中的每个值来格式化显示。

要注意的是,使用 df.style.format() 只会更改 DataFrame 的显示样式,而不会更改 DataFrame 中的实际数据。

提问:修改的样式如何恢复?

答:当您使用 df.style.format() 方法更改了 DataFrame 的显示样式,实际上您并没有修改 DataFrame 本身的数据,只是修改了其显示的样式。

要“取消”样式更改并返回到原始显示,您只需直接调用 DataFrame 的名称。例如,如果您的 DataFrame 名称是 df,只需再次输入 df 即可。

但如果您已经将样式化的 DataFrame 分配给了另一个变量,例如 styled_df = df.style.format(...), 则原始的 df 仍然保持不变。在这种情况下,直接调用 df 会显示原始的未格式化数据。

总之,只需再次引用原始 DataFrame 的名称即可返回到未格式化的显示。

df
column1
01.265021e-08
17.763215e-05
25.331380e-01
33.177901e-07
41.341835e-03
51.488887e-05
63.226127e-12
71.604492e-08
81.836409e-01
94.988592e-02
直接修改法:当数据类型为numpy.ndarray时 会更改数据本身
# 数据准备
numbers = np.random.random(10)**10
print(numbers)# 转换数据为百分数
percentages = numbers * 100# 将数字列表转化为百分数形式的字符串
formatted_percentages = ["{:.2f}%".format(p) for p in percentages]
formatted_percentages
[2.73666561e-10 1.57123441e-12 5.26265187e-02 9.85684929e-142.58206465e-07 1.14402849e-04 5.41450503e-01 7.71294410e-023.59544557e-02 7.83249726e-01]['0.00%','0.00%','5.26%','0.00%','0.00%','0.01%','54.15%','7.71%','3.60%','78.32%']

关键代码解析:[“{:.2f}%”.format§ for p in percentages]

当然可以,这段代码是一个列表推导式(list comprehension),用于格式化和转换数字列表为百分数字符串列表。下面是对这段代码的详细解析:

  1. 列表推导式[expression for item in iterable] 是一个简洁的方法来创建列表。它遍历每一个 itemiterable 中,并使用 expression 计算得到新的值,最后将这些值组合成一个新的列表。

  2. "{:.2f}%".format(p):这是一个字符串格式化表达式。

    • "{:.2f}" 是一个格式字符串,它告诉 Python 如何格式化一个浮点数。
      • . 表示小数点。
      • 2 表示小数点后保留两位数字。
      • f 表示浮点数格式。
    • % 是添加在字符串末尾的,将数字转换为百分比的形式。
    • .format(p) 是一个方法,用于将浮点数 p 插入到格式字符串中,产生一个格式化后的字符串。
  3. for p in percentages:这是一个循环,它会遍历 percentages 列表中的每一个值,并将每个值赋给变量 p

所以,这个列表推导式的工作方式是:对于 percentages 列表中的每一个数字 p,它都会创建一个新的字符串,其中 p 被格式化为百分数形式,并保留两位小数。最后,这些格式化的字符串被组合成一个新的列表。

直接修改法2:当数据类型为dataframe时 会修改数据本身

如果这列数据是一个 pandas DataFrame 的列,您可以使用 pandas 的 .apply() 方法来格式化每个值。以下是步骤:

  1. 首先,确保您已导入 pandas 库。
  2. 使用 .apply() 方法并传递一个 lambda 函数来格式化每个值。

假设您的 DataFrame 名称为 df 并且要格式化的列名为 'column_name',那么您可以按以下方式操作:

df['column_name'] = df['column_name'].apply(lambda x: "{:.2f}%".format(x*100))
# 使用刚才的 `percentages` 数据来创建一个简单的 DataFrame,并将其转换为百分数格式
df2 = pd.DataFrame({'Values':percentages})# 将Values列转换为百分数格式
df2['Values'] = df2['Values'].apply(lambda x:"{:.2f}%".format(x))df2
Values
00.00%
10.00%
25.26%
30.00%
40.00%
50.01%
654.15%
77.71%
83.60%
978.32%
再拓展 : “{:.2f}%”.format§ 与’{0:.2%}'.format§

总结一下:

“{:.2f}%”.format§ 是手动添加百分号的方式,您需要确保值已经乘以 100。

‘{0:.2%}’.format§ 会自动乘以 100 并添加百分号。

# 示例:
a = 0.5
print('{:.2f}%'.format(a))
print('{0:.2%}'.format(a))
0.50%
50.00%

此外:在字符串格式化中,{} 中的数字(如 {0})表示参数的位置索引。当使用 .format() 方法传递多个参数时,这可以帮助您指定哪个参数应该放在哪个位置。例如:

"{} {}".format("Hello", "World")  # 输出 "Hello World"
"{1} {0}".format("Hello", "World")  # 输出 "World Hello"

但在大多数情况下,当您只有一个参数并且按顺序插入它们时,位置索引是可以省略的,因此以下两种写法是等效的:

  1. "{:.2%}".format(value)
  2. "{0:.2%}".format(value)

106.查找上一题数据中第3大值的行号

方法一:

查找某列数据中第3大值的行号。

选择了列 ‘column1’ 中的前三个最大值,然后直接从返回的索引中选择最后一个,即第3大值的索引。

# type(df['column1'].nlargest(3)) pandas.core.series.Seriesdf['column1'].nlargest(3).index[-1]
9
方法二:

使用 df['column1'].argsort() 会返回一个整数索引的 Series,该 Series 描述了如何对 df['column1'] 进行排序以使其按升序排列。

例如,如果您有以下 DataFrame:

import pandas as pddata = {'column1': [50, 10, 40, 30, 20]
}
df = pd.DataFrame(data)

执行 df['column1'].argsort() 会返回:

1    1
4    4
3    3
2    2
0    0
Name: column1, dtype: int64
# 首先对列进行升序排序,得到索引从小到大的排序,然后使用 `iloc[-3]` 选择第3大的值,即为原始数第三大值的索引。
df['column1'].argsort().iloc[-3]
9

注意:

argsort() 默认是按升序排列,不直接提供选项来调整排序的方向。

如果想按降序排列,可以先取反(对于数字列),然后再使用 argsort()。例如:

desc_order_index = (-df['column1']).argsort()

这样,desc_order_index 就会表示按降序排列 df['column1'] 所需的索引顺序。

如果您想获取第3大的值的行号,可以使用:

third_largest_index = (-df['column1']).argsort().iloc[2]

这将首先对列进行降序排序,然后使用 iloc[2] 选择第3大的值的索引。

107.反转df的行

方法一:
# df.iloc[::-1].reset_index(drop=True) 此方法更接近实际使用,多了一个丢弃旧索引的步骤
df.iloc[::-1]
column1
94.988592e-02
81.836409e-01
71.604492e-08
63.226127e-12
51.488887e-05
41.341835e-03
33.177901e-07
25.331380e-01
17.763215e-05
01.265021e-08
df[::-1]
column1
94.988592e-02
81.836409e-01
71.604492e-08
63.226127e-12
51.488887e-05
41.341835e-03
33.177901e-07
25.331380e-01
17.763215e-05
01.265021e-08
方法二:本质是和方法一一样,但是有个容易忽略的点
df.iloc[::-1,:]
column1
94.988592e-02
81.836409e-01
71.604492e-08
63.226127e-12
51.488887e-05
41.341835e-03
33.177901e-07
25.331380e-01
17.763215e-05
01.265021e-08

注意:df.iloc[::-1,:]可以达到同样的效果,但是df[::-1,:]会报错。

  • df.iloc[::-1]df.iloc[::-1, :] 可以用来反转 DataFrame 的行,并保留所有列。iloc 用于基于整数位置的索引。
  • df[::-1] 也可以用来反转行,但不允许使用额外的列索引(:),因此 df[::-1, :] 会引发语法错误。

在 Pandas 中,df[::-1] 是一个简单的语法糖,它背后实际上是在使用 ilociloc 允许更复杂的索引选项,包括同时选择行和列,因此 df.iloc[::-1, :] 是有效的。

以下是一些例子来说明这些点:

import pandas as pd# 创建一个 DataFrame
df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6]
})# 使用 df[::-1] 反转 DataFrame 的行
df_reversed_1 = df[::-1]# 使用 df.iloc[::-1, :] 反转 DataFrame 的行
df_reversed_2 = df.iloc[::-1, :]

在这两种情况下,行都被成功反转,但索引保持不变。如果需要,您可以使用 reset_index(drop=True) 来重置索引。

108.按照多列对数据进行合并

# 输入
df1 = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],'key2': ['K0', 'K1', 'K0', 'K1'],'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3']
})df2 = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],'key2': ['K0', 'K0', 'K0', 'K0'],'C': ['C0', 'C1', 'C2', 'C3'],'D': ['D0', 'D1', 'D2', 'D3']
})
pd.merge(df1,df2,on = ['key1','key2'])
key1key2ABCD
0K0K0A0B0C0D0
1K1K0A2B2C1D1
2K1K0A2B2C2D2

109.按照多列对数据进行合并

pd.merge(df1, df2, how='left', on=['key1', 'key2'])
key1key2ABCD
0K0K0A0B0C0D0
1K0K1A1B1NaNNaN
2K1K0A2B2C1D1
3K1K0A2B2C2D2
4K2K1A3B3NaNNaN

注意区分上述两种数据处理方式的区别:

result = pd.merge(df1, df2, how='left', on=['key1', 'key2'])

这行代码会执行左连接(left join)合并操作。它将根据 key1key2 列合并 df1df2,并保留 df1(左侧 DataFrame)中的所有行。如果 df2(右侧 DataFrame)中存在匹配的行,则 df2 的值将被添加到结果中。如果 df2 中没有匹配的行,则结果中的相应单元格将被填充为 NaN

具体效果如下:

  1. df1df2 中的所有列都将出现在结果 DataFrame 中。
  2. df1 中的所有行都将出现在结果 DataFrame 中。
  3. 如果 df2 中有与 df1 匹配的行(基于 key1key2),则 df2 中的 CD 列的值将被添加到结果中。
  4. 如果 df2 中没有与 df1 匹配的行,则结果 DataFrame 中的 CD 列将被填充为 NaN

让我们来执行这个操作并查看结果。

合并的结果如下:

[
\begin{array}{cccccc}
\text{key1} & \text{key2} & \text{A} & \text{B} & \text{C} & \text{D} \
\hline
\text{K0} & \text{K0} & \text{A0} & \text{B0} & \text{C0} & \text{D0} \
\text{K0} & \text{K1} & \text{A1} & \text{B1} & \text{NaN} & \text{NaN} \
\text{K1} & \text{K0} & \text{A2} & \text{B2} & \text{C1} & \text{D1} \
\text{K1} & \text{K0} & \text{A2} & \text{B2} & \text{C2} & \text{D2} \
\text{K2} & \text{K1} & \text{A3} & \text{B3} & \text{NaN} & \text{NaN} \
\end{array}
]

如您所见:

  • 第一行 (key1=K0, key2=K0) 在 df2 中有匹配的行,所以 CD 列的值是 C0D0
  • 第二行 (key1=K0, key2=K1) 在 df2 中没有匹配的行,所以 CD 列的值是 NaN
  • 第三和第四行 (key1=K1, key2=K0) 在 df2 中有两个匹配的行,所以结果中分别有 C1, D1C2, D2
  • 第五行 (key1=K2, key2=K1) 在 df2 中没有匹配的行,所以 CD 列的值是 NaN

110.再次读取数据1并显示所有的列

df = pd.read_csv('pandas120_101_120_1.csv', encoding='gbk')
pd.set_option("display.max.columns", None)
df
positionIdpositionNamecompanyIdcompanyLogocompanySizeindustryFieldfinanceStagecompanyLabelListfirstTypesecondTypethirdTypeskillLablespositionLablesindustryLablescreateTimeformatCreateTimedistrictbusinessZonessalaryworkYearjobNatureeducationpositionAdvantageimStatelastLoginpublisherIdapprovesubwaylinestationnamelinestaionlatitudelongitudehitagsresumeProcessRateresumeProcessDayscorenewScorematchScorematchScoreExplainqueryexplainisSchoolJobadWordpluspcShowappShowdelivergradeDescriptionpromotionScoreExplainisHotHirecountaggregatePositionIdsfamousCompany
06802721数据分析475770i/image2/M01/B7/3E/CgoB5lwPfEaAdn8WAABWQ0Jgl5s...50-150人移动互联网,电商A轮['绩效奖金', '带薪年假', '定期体检', '弹性工作']产品|需求|项目类数据分析数据分析['SQL', '数据库', '数据运营', 'BI']['电商', '社交', 'SQL', '数据库', '数据运营', 'BI']['电商', '社交', 'SQL', '数据库', '数据运营', 'BI']2020/3/16 11:0011:00发布余杭区['仓前']375001-3年全职本科五险一金、弹性工作、带薪年假、年度体检today2020/3/16 11:00120224061NaNNaNNaN30.278421120.005922NaN501233015.101875NaNNaNNaN00NaN000NaNNaN00[]False
15204912数据建模50735image1/M00/00/85/CgYXBlTUXeeAR0IjAABbroUk-dw97...150-500人电商B轮['年终奖金', '做五休二', '六险一金', '子女福利']开发|测试|运维类数据开发建模['算法', '数据架构']['算法', '数据架构'][]2020/3/16 11:0811:08发布滨江区['西兴', '长河']150003-5年全职本科六险一金,定期体检,丰厚年终disabled2020/3/16 11:0854916881NaNNaNNaN30.188041120.201179NaN231176032.559414NaNNaNNaN00NaN000NaNNaN00[]False
26877668数据分析100125image2/M00/0C/57/CgqLKVYcOA2ADcFuAAAE8MukIKA74...2000人以上移动互联网,企业服务上市公司['节日礼物', '年底双薪', '股票期权', '带薪年假']产品|需求|项目类数据分析数据分析['数据库', '数据分析', 'SQL']['数据库', 'SQL'][]2020/3/16 10:3310:33发布江干区['四季青', '钱江新城']35001-3年全职本科五险一金 周末双休 不加班 节日福利today2020/3/16 10:33532258314号线江锦路4号线_城星路;4号线_市民中心;4号线_江锦路30.241521120.212539NaN11480014.972357NaNNaNNaN00NaN000NaNNaN00[]False
36496141数据分析26564i/image2/M01/F7/3F/CgoB5lyGAQGAZeI-AAAdOqXecnw...500-2000人电商D轮及以上['生日趴', '每月腐败基金', '每月补贴', '年度旅游']开发|测试|运维类数据开发数据分析[]['电商']['电商']2020/3/16 10:1010:10发布江干区NaN450003-5年全职本科年终奖等threeDays2020/3/16 10:10981456011号线文泽路1号线_文泽路30.299404120.350304NaN100168012.874153NaNNaNNaN00NaN000NaNNaN00[]True
46467417数据分析29211i/image2/M01/77/B8/CgoB5l1WDyGATNP5AAAlY3h88SY...2000人以上物流丨运输上市公司['技能培训', '免费班车', '专项奖金', '岗位晋升']产品|需求|项目类数据分析数据分析['BI', '数据分析', '数据运营']['BI', '数据运营'][]2020/3/16 09:5609:56发布余杭区['仓前']300003-5年全职大专五险一金disabled2020/3/16 09:5663923941NaNNaNNaN30.282952120.009765NaN20166012.755375NaNNaNNaN00NaN000NaNNaN00[]True
..................................................................................................................................................................
1006884346数据分析师21236i/image/M00/43/F6/CgqKkVeEh76AUVPoAAA2Bj747wU6...500-2000人移动互联网,医疗丨健康C轮['技能培训', '年底双薪', '节日礼物', '绩效奖金']产品|需求|项目类数据分析数据分析['数据库', '商业', '数据分析', 'SQL']['医疗健康', '数据库', '商业', '数据分析', 'SQL']['医疗健康', '数据库', '商业', '数据分析', 'SQL']2020/3/11 16:452020/3/11萧山区NaN250003-5年全职不限大牛老板,开放环境,民生行业,龙头公司threeDays2020/3/16 09:4916651671NaNNaNNaN30.203078120.247069NaN961000.314259NaNNaNNaN00NaN000NaNNaN00[]False
1016849100商业数据分析72076i/image2/M01/92/A4/CgotOV2LPUmAR_8dAAB_DlDMiXA...500-2000人移动互联网,电商C轮['节日礼物', '股票期权', '带薪年假', '年度旅游']市场|商务类市场|营销商业数据分析['市场', '数据分析', '行业分析', '市场分析']['电商', '市场', '数据分析', '行业分析', '市场分析']['电商', '市场', '数据分析', '行业分析', '市场分析']2020/3/14 17:382天前发布余杭区NaN350001-3年全职硕士五险一金、带薪休假threeDays2020/3/14 17:3817324161NaNNaNNaN30.276694119.990918NaN23000.283276NaNNaNNaN00NaN000NaNNaN00[]False
1026803432奔驰·耀出行-BI数据分析专家751158i/image3/M01/64/93/Cgq2xl48z2mAeYRoAAD6Qf_Jeq8...150-500人移动互联网不需要融资[]开发|测试|运维类数据开发数据分析['MySQL', '数据处理', '数据分析']['MySQL', '数据处理', '数据分析'][]2020/3/14 22:392天前发布滨江区['西兴']300003-5年全职本科奔驰 吉利 世界500强threeDays2020/3/14 22:39478564311号线滨和路1号线_滨和路;1号线_江陵路;1号线_滨和路;1号线_江陵路30.208562120.219225NaN631000.256719NaNNaNNaN00NaN000NaNNaN00[]False
1036704835BI数据分析师52840i/image2/M00/26/CA/CgoB5lofsguAfk9ZAACoL3r4p24...2000人以上电商上市公司['技能培训', '年底双薪', '节日礼物', '绩效奖金']开发|测试|运维类数据开发数据分析['SQLServer', '数据分析']['电商', '新零售', 'SQLServer', '数据分析']['电商', '新零售', 'SQLServer', '数据分析']2020/3/9 15:002020/3/9余杭区['仓前']200003-5年全职本科阿里巴巴;商业智能;threeDays2020/3/16 10:1558463501NaNNaNNaN30.280177120.023521['16薪', '一年调薪2次']00000.281062NaNNaNNaN00NaN000NaNNaN00[]True
1046728058数据分析专家-LQ(J181203029)2474i/image2/M01/14/4D/CgoB5lyq5fqAAHHzAAAa148hbk8...2000人以上汽车丨出行不需要融资['弹性工作', '节日礼物', '岗位晋升', '技能培训']产品|需求|项目类数据分析其他数据分析[]['滴滴']['滴滴']2020/3/13 18:243天前发布西湖区NaN215005-10年全职本科广阔平台诱人福利disabled2020/3/13 19:5167994951NaNNaNNaN30.290746120.074315NaN00000.159343NaNNaNNaN00NaN000NaNNaN00[]True

105 rows × 53 columns

拓展:pd.set_option(“display.max_columns”, None)

pd.set_option("display.max_columns", None) 是用来设置 Pandas 显示选项的,确保当您显示 DataFrame 时,所有的列都会被显示出来,而不是被截断。

  • "display.max_columns" 是要设置的选项的名称。
  • None 是分配给该选项的值,意味着没有列的最大数量限制。

例如,在处理具有大量列的大型 DataFrame 时,Pandas 默认只显示一部分列。使用上面的设置,您可以确保所有列都会被显示出来。

如果您想要设置其他显示选项,例如行的最大数量,您可以使用 pd.set_option("display.max_rows", None)

这是一个例子,演示如何使用这个设置:

import pandas as pd# 设置显示选项以显示所有列
pd.set_option("display.max_columns", None)# 创建一个具有多个列的 DataFrame
df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9],'D': [10, 11, 12],'E': [13, 14, 15]
})# 显示 DataFrame
print(df)

在这个例子中,无论您的屏幕有多宽,DataFrame 的所有列都会被显示出来。

如果您想要恢复 Pandas 的显示设置到默认值,您可以使用 pd.reset_option() 函数。您只需提供您想要重置的选项的名称作为参数。

例如:

  • 要重置最大列数的显示设置,您可以使用:pd.reset_option("display.max_columns")
  • 要重置最大行数的显示设置,您可以使用:pd.reset_option("display.max_rows")

如果您想要一次重置多个选项,只需将它们作为参数传递即可:

pd.reset_option("display.max_columns", "display.max_rows")

如果您想要重置所有的显示选项到默认设置,您可以使用:

pd.reset_option("all")

但是注意,使用 "all" 选项时,会出现一个额外的确认提示,因为这将重置所有的选项,不仅仅是显示相关的选项。

111.查找secondType与thirdType值相等的行号

方法一:布尔索引
mask = df[df['secondType']==df['thirdType']].index
mask
Int64Index([  0,   2,   4,   5,   6,  10,  14,  23,  25,  27,  28,  29,  30,33,  37,  38,  39,  40,  41,  48,  49,  52,  53,  55,  57,  61,65,  66,  67,  71,  73,  74,  75,  79,  80,  82,  85,  88,  89,91,  96, 100],dtype='int64')
方法二:loc方法

注意:用于基于标签的索引。当使用布尔序列进行索引时,它返回所有对应于 True 的行。

例如:df.loc[df[‘secondType’] == df[‘thirdType’]] 返回所有 secondType 和 thirdType 列值相等的行。

mask = df.loc[df['secondType'] == df['thirdType']].index
mask
Int64Index([  0,   2,   4,   5,   6,  10,  14,  23,  25,  27,  28,  29,  30,33,  37,  38,  39,  40,  41,  48,  49,  52,  53,  55,  57,  61,65,  66,  67,  71,  73,  74,  75,  79,  80,  82,  85,  88,  89,91,  96, 100],dtype='int64')
方法三:np.where()

np.where 函数用于返回输入数组(在这种情况下是一个布尔数组)中 True 值的索引。

当您使用它来比较 DataFrame 中的两列时,它将返回一个元组,其中包含满足条件的行索引。

本例中:使用 np.where 找到 secondType 和 thirdType 值相等的行号

equal_rows = np.where(df['secondType'] == df['thirdType'])

其中,equal_rows 将是一个元组,包含一个数组,数组中的值是满足条件的行号,可以通过 equal_rows[0] 来访问这个数组。

equal_rows_index = equal_rows[0] # 结果将是一个数组:array([0, 2])

equal_rows = np.where(df.secondType == df.thirdType)
equal_rows[0]
array([  0,   2,   4,   5,   6,  10,  14,  23,  25,  27,  28,  29,  30,33,  37,  38,  39,  40,  41,  48,  49,  52,  53,  55,  57,  61,65,  66,  67,  71,  73,  74,  75,  79,  80,  82,  85,  88,  89,91,  96, 100], dtype=int64)

112.查找薪资大于平均薪资的第三个数据

方法一:找到薪资大于均值的数据,选择第三个
mean_value = df['salary'].mean()
temp_df = df.loc[df['salary']>mean_value]['salary'].reset_index()
temp_df.loc[2,'index']
5
# 实际使用应该是要具体的值吧,以下是获取第三个值的代码
mean_value = df['salary'].mean()
temp_df = df.loc[df['salary']>mean_value]['salary'].reset_index()
temp_df.loc[2,'salary']
50000
方法二:np.argwhere()

np.argwhere(): 这是 NumPy 的一个函数,用于找出传入数组中非零(True)元素的索引。在这里,它被用于找出 ‘salary’ 列中大于平均工资的所有索引。

报错示例:np.argwhere(df[‘salary’]>df[‘salary’].mean())[2]

运行报错:ValueError: Length of values (1) does not match length of index (105)

说明:
这个错误是由于尝试使用 np.argwhere 处理 pandas 的 Series 时产生的。np.argwhere 与 pandas Series 之间存在一些不兼容的问题,特别是在返回值的形状上。这就是为什么你看到 “Length of values (1) does not match length of index (105)” 这个错误消息的原因。

为了解决这个问题,你可以将 pandas Series 转换为 NumPy 数组,然后应用 np.argwhere。以下是如何做到这一点的方法:

indices = np.argwhere(df['salary'].values > df['salary'].mean()).flatten()
index_of_third_entry = indices[2]

在这里,我们使用 .valuesSeries 转换为 NumPy 数组。flatten() 用于将结果从二维数组转换为一维数组。

temp_df = np.argwhere(df['salary'].values>df['salary'].mean()).flatten()
temp_df[2]
5
temp_df = np.argwhere(df['salary'].values>df['salary'].mean()).flatten()
df.loc[temp_df[2],'salary']
50000

113.将上一题数据的salary列开根号

np.sqrt(df['salary'])
0      193.649167
1      122.474487
2       59.160798
3      212.132034
4      173.205081...    
100    158.113883
101    187.082869
102    173.205081
103    141.421356
104    146.628783
Name: salary, Length: 105, dtype: float64
df['salary'].apply(np.sqrt)
0      193.649167
1      122.474487
2       59.160798
3      212.132034
4      173.205081...    
100    158.113883
101    187.082869
102    173.205081
103    141.421356
104    146.628783
Name: salary, Length: 105, dtype: float64

114.将上一题数据的linestaion列按_拆分

# 确定数据类型
df[['linestaion']].info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 105 entries, 0 to 104
Data columns (total 1 columns):#   Column      Non-Null Count  Dtype 
---  ------      --------------  ----- 0   linestaion  45 non-null     object
dtypes: object(1)
memory usage: 968.0+ bytes
# 使用str.split拆分
temp_df = df['linestaion'].str.split('_')
temp_df
0                                        NaN
1                                        NaN
2              [4号线, 城星路;4号线, 市民中心;4号线, 江锦路]
3                                 [1号线, 文泽路]
4                                        NaN...                  
100                                      NaN
101                                      NaN
102    [1号线, 滨和路;1号线, 江陵路;1号线, 滨和路;1号线, 江陵路]
103                                      NaN
104                                      NaN
Name: linestaion, Length: 105, dtype: object

115.查看上一题数据中一共有多少列

df.shape[1]
53

116.提取industryField列以’数据’开头的行

df[df['industryField'].str.startswith('数据')]
positionIdpositionNamecompanyIdcompanyLogocompanySizeindustryFieldfinanceStagecompanyLabelListfirstTypesecondTypethirdTypeskillLablespositionLablesindustryLablescreateTimeformatCreateTimedistrictbusinessZonessalaryworkYearjobNatureeducationpositionAdvantageimStatelastLoginpublisherIdapprovesubwaylinestationnamelinestaionlatitudelongitudehitagsresumeProcessRateresumeProcessDayscorenewScorematchScorematchScoreExplainqueryexplainisSchoolJobadWordpluspcShowappShowdelivergradeDescriptionpromotionScoreExplainisHotHirecountaggregatePositionIdsfamousCompany
86458372数据分析专家34132i/image2/M01/F8/DE/CgoB5lyHTJeAP7v9AAFXUt4zJo4...150-500人数据服务,广告营销A轮['开放式办公', '扁平管理', '带薪假期', '弹性工作时间']产品|需求|项目类数据分析其他数据分析['数据分析', '数据运营']['电商', '广告营销', '数据分析', '数据运营']['电商', '广告营销', '数据分析', '数据运营']2020/3/16 10:5710:57发布余杭区NaN600005-10年全职本科六险一金、境内外旅游、带薪年假、培训发展today2020/3/16 09:5175425461NaNNaNNaN30.281850120.015690NaN8312401.141952NaNNaNNaN00NaN000NaNNaN00[]False
106804629数据分析师34132i/image2/M01/F8/DE/CgoB5lyHTJeAP7v9AAFXUt4zJo4...150-500人数据服务,广告营销A轮['开放式办公', '扁平管理', '带薪假期', '弹性工作时间']产品|需求|项目类数据分析数据分析['数据分析']['电商', '广告营销', '数据分析']['电商', '广告营销', '数据分析']2020/3/16 10:5710:57发布余杭区NaN30000不限全职本科六险一金 旅游 带薪年假 培训发展 双休today2020/3/16 09:5175425461NaNNaNNaN30.281850120.015690NaN8311701.161869NaNNaNNaN00NaN000NaNNaN00[]False
136804489资深数据分析师34132i/image2/M01/F8/DE/CgoB5lyHTJeAP7v9AAFXUt4zJo4...150-500人数据服务,广告营销A轮['开放式办公', '扁平管理', '带薪假期', '弹性工作时间']开发|测试|运维类数据开发数据分析['数据分析']['电商', '数据分析']['电商', '数据分析']2020/3/16 10:5710:57发布余杭区NaN300003-5年全职本科六险一金 旅游 带薪年假 培训发展 双休today2020/3/16 09:5175425461NaNNaNNaN30.281850120.015690NaN8311601.075559NaNNaNNaN00NaN000NaNNaN00[]False
216267370数据分析专家31544image1/M00/00/48/CgYXBlTUXOaADKooAABjQoD_n1w50...150-500人数据服务不需要融资['专业红娘牵线', '节日礼物', '技能培训', '岗位晋升']开发|测试|运维类数据开发数据分析['数据挖掘', '数据分析']['数据挖掘', '数据分析'][]2020/3/16 11:1611:16发布滨江区NaN200005-10年全职本科五险一金today2020/3/16 11:1646673814号线中医药大学4号线_中医药大学;4号线_联庄30.185480120.139320NaN431701.290228NaNNaNNaN00NaN000NaNNaN00[]False
326804489资深数据分析师34132i/image2/M01/F8/DE/CgoB5lyHTJeAP7v9AAFXUt4zJo4...150-500人数据服务,广告营销A轮['开放式办公', '扁平管理', '带薪假期', '弹性工作时间']开发|测试|运维类数据开发数据分析['数据分析']['电商', '数据分析']['电商', '数据分析']2020/3/16 10:5710:57发布余杭区NaN375003-5年全职本科六险一金 旅游 带薪年假 培训发展 双休today2020/3/16 09:5175425461NaNNaNNaN30.281850120.015690NaN8311601.075712NaNNaNNaN00NaN000NaNNaN00[]False
376242470数据分析师31544image1/M00/00/48/CgYXBlTUXOaADKooAABjQoD_n1w50...150-500人数据服务不需要融资['专业红娘牵线', '节日礼物', '技能培训', '岗位晋升']产品|需求|项目类数据分析数据分析['增长黑客', '数据分析', '商业']['增长黑客', '数据分析', '商业'][]2020/3/16 11:1611:16发布滨江区NaN225001-3年全职本科五险一金today2020/3/16 11:1646673814号线中医药大学4号线_中医药大学;4号线_联庄30.185480120.139320NaN431501.060218NaNNaNNaN00NaN000NaNNaN00[]False
506680900数据分析师 (MJ000250)114335i/image2/M00/17/C2/CgoB5ln5lUuAM8oSAADO2Rz54hQ...150-500人数据服务B轮['股票期权', '弹性工作', '领导好', '五险一金']产品|需求|项目类产品经理数据分析师['需求分析', '数据']['企业服务', '大数据', '需求分析', '数据']['企业服务', '大数据', '需求分析', '数据']2020/3/16 10:4910:49发布西湖区NaN275003-5年全职不限阿里系创业、云计算生态、餐补、双休today2020/3/16 10:4938592611NaNNaNNaN30.289482120.067080NaN11500.947202NaNNaNNaN00NaN000NaNNaN00[]False
636680900数据分析师 (MJ000250)114335i/image2/M00/17/C2/CgoB5ln5lUuAM8oSAADO2Rz54hQ...150-500人数据服务B轮['股票期权', '弹性工作', '领导好', '五险一金']产品|需求|项目类产品经理数据分析师['需求分析', '数据']['企业服务', '大数据', '需求分析', '数据']['企业服务', '大数据', '需求分析', '数据']2020/3/16 10:4910:49发布西湖区NaN275003-5年全职不限阿里系创业、云计算生态、餐补、双休today2020/3/16 10:4938592611NaNNaNNaN30.289482120.067080NaN11400.856464NaNNaNNaN00NaN000NaNNaN00[]False
785683671数据分析实习生 (MJ000087)114335i/image2/M00/17/C2/CgoB5ln5lUuAM8oSAADO2Rz54hQ...150-500人数据服务B轮['股票期权', '弹性工作', '领导好', '五险一金']开发|测试|运维类后端开发数据采集['数据挖掘', '机器学习']['工具软件', '大数据', '数据挖掘', '机器学习']['工具软件', '大数据', '数据挖掘', '机器学习']2020/3/16 10:4910:49发布西湖区NaN26500应届毕业生实习本科阿里系创业、云计算生态、餐补、双休today2020/3/16 10:4938592611NaNNaNNaN30.289482120.067080NaN11300.898513NaNNaNNaN10NaN000NaNNaN00[]False
796046866数据分析师543802i/image2/M01/63/3C/CgotOV0ulwOAU8KWAAAsMECc53M...15-50人数据服务不需要融资[]产品|需求|项目类数据分析数据分析['可视化', '数据分析', '数据库']['企业服务', '可视化', '数据分析', '数据库']['企业服务', '可视化', '数据分析', '数据库']2020/3/16 10:1910:19发布西湖区['西溪', '文新']375001-3年全职本科发展潜力,结合业务,项目制overSevenDays2020/3/16 10:191330838512号线文新2号线_文新;2号线_三坝30.289000120.088789NaN00300.902939NaNNaNNaN00NaN000NaNNaN00[]False
926813626资深数据分析专员165939i/image3/M01/65/71/CgpOIF5CFp2ACoo9AAD3IkKwlv8...150-500人数据服务不需要融资['年底双薪', '带薪年假', '午餐补助', '定期体检']开发|测试|运维类数据开发数据分析['数据分析']['数据分析'][]2020/3/15 12:211天前发布余杭区NaN300003-5年全职不限阿里旗下、大数据today2020/3/15 13:1385198051NaNNaNNaN30.281507120.018621NaN11100.440405NaNNaNNaN00NaN000NaNNaN00[]False
946818950资深数据分析师165939i/image3/M01/65/71/CgpOIF5CFp2ACoo9AAD3IkKwlv8...150-500人数据服务不需要融资['年底双薪', '带薪年假', '午餐补助', '定期体检']开发|测试|运维类数据开发数据分析['数据分析']['数据分析'][]2020/3/15 12:211天前发布余杭区NaN300005-10年全职不限阿里旗下、大数据today2020/3/15 13:1385198051NaNNaNNaN30.281507120.018621NaN11100.407209NaNNaNNaN00NaN000NaNNaN00[]False
976718750旅游大数据分析师(杭州)122019i/image/M00/1A/4A/CgqKkVb583WABT4BAABM5RuPCmk9...50-150人数据服务,企业服务A轮['年底双薪', '股票期权', '午餐补助', '定期体检']开发|测试|运维类数据开发数据治理['数据分析', '数据处理']['旅游', '大数据', '数据分析', '数据处理']['旅游', '大数据', '数据分析', '数据处理']2020/3/12 16:382020/3/12上城区['湖滨', '吴山']300001-3年全职本科管理扁平 潜力项目 五险一金 周末双休sevenDays2020/3/13 08:481134763012号线中河北路1号线_定安路;1号线_龙翔桥;1号线_凤起路;1号线_定安路;1号线_龙翔桥;1号线_凤起...30.254169120.164651NaN30100.826756NaNNaNNaN00NaN000NaNNaN00[]False
986655562数据分析建模工程师117422215i/image2/M01/AF/6D/CgotOV3ki4iAOuo3AABbilI8DfA...50-150人数据服务,信息安全A轮['午餐补助', '带薪年假', '16到18薪', '法定节假日']开发|测试|运维类人工智能机器学习['机器学习', '建模', '数据挖掘', '算法']['机器学习', '建模', '数据挖掘', '算法'][]2020/3/14 19:002天前发布西湖区NaN300001-3年全职本科海量数据 全链路建模实践 16-18薪threeDays2020/3/16 09:30881033612号线丰潭路2号线_古翠路;2号线_丰潭路30.291494120.113955NaN00000.356308NaNNaNNaN00NaN000NaNNaN00[]False
996677939数据分析建模工程师(校招)117422215i/image2/M01/AF/6D/CgotOV3ki4iAOuo3AABbilI8DfA...50-150人数据服务,信息安全A轮['午餐补助', '带薪年假', '16到18薪', '法定节假日']开发|测试|运维类人工智能算法工程师['机器学习', '建模', '算法', '数据挖掘']['机器学习', '建模', '算法', '数据挖掘'][]2020/3/14 19:002天前发布西湖区NaN36500应届毕业生全职本科海量数据 全链路建模实践 16-18薪threeDays2020/3/16 09:30881033612号线丰潭路2号线_古翠路;2号线_丰潭路30.291494120.113955NaN00000.338603NaNNaNNaN10NaN000NaNNaN00[]False

117.按列制作数据透视表

pd.pivot_table 来制作数据透视表

pd.pivot_table(df, values=["salary", "score"], index="positionId")

这里的意思是:

  • 使用 df(一个 pandas DataFrame)作为数据源。
  • positionId 列作为索引(行标签)。
  • salaryscore 两列的值进行聚合。默认情况下,pd.pivot_table 使用 mean 作为聚合函数,这意味着它将为每个唯一的 positionId 计算 salaryscore 的平均值。

结果将是一个新的 DataFrame,其中行标签是 positionId 的唯一值,列标签是 salaryscore,每个单元格的值是对应 positionIdsalaryscore 的平均值。

如果你有其他特定的聚合函数或其他参数需要,你可以进一步定制 pd.pivot_table。例如,你可以通过添加 aggfunc 参数来指定其他聚合函数。

pd.pivot_table(df,values = ['salary','score'],index = 'positionId')
salaryscore
positionId
5203054300004.0
520491215000176.0
5269002375001.0
5453691300004.0
55199623750014.0
.........
68829832750015.0
6884346250000.0
6886661375005.0
6888169425001.0
6896403300003.0

95 rows × 2 columns

118.同时对salary、score两列进行计算

注意:内置的聚合函数需要使用字符串指定,numpy的聚合函数直接指定即可

  1. 内置的聚合函数:当使用pandas内置的聚合函数(如’sum’、‘mean’、'max’等)时,您应该使用它们的字符串表示。例如:df[['salary', 'score']].agg(['sum', 'mean', 'max'])

  2. NumPy的聚合函数:当您想使用NumPy的聚合函数时,您应该直接传递函数,而不是它们的字符串表示。例如:df[['salary', 'score']].agg([np.sum, np.mean, np.max])

# 内置的聚合函数需要使用字符串指定
df[['salary','score']].agg(['sum','mean','max'])
salaryscore
sum3.331000e+061335.000000
mean3.172381e+0412.714286
max6.000000e+04233.000000
# numpy的聚合函数直接指定即可
df[['salary','score']].agg([np.sum,np.mean,np.max])
salaryscore
sum3.331000e+061335.000000
mean3.172381e+0412.714286
amax6.000000e+04233.000000

119.对salary求平均,对score列求和

df[['salary','score']].agg([np.mean,np.sum])
salaryscore
mean3.172381e+0412.714286
sum3.331000e+061335.000000
df[['salary','score']].agg(['mean','sum'])
salaryscore
mean3.172381e+0412.714286
sum3.331000e+061335.000000

120.计算并提取平均薪资最高的区

df[['district','salary']].groupby(by = ['district']).mean().sort_values(by = 'district',ascending = False).head(1)
salary
district
西湖区30893.939394

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148299.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

智能合约漏洞,BEVO 代币损失 4.5 万美元攻击事件分析

智能合约漏洞&#xff0c;BEVO 代币损失 4.5 万美元攻击事件分析 一、事件背景 北京时间 2023 年 1 月 31 日&#xff0c;在 twitter 上看到这样一条消息&#xff1a; BEVO 代币被攻击&#xff0c;总共损失 45000 美元&#xff0c;导致 BEVO 代币的价格下跌了 99%。 有趣的是…

2023年山东省安全员C证证考试题库及山东省安全员C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年山东省安全员C证证考试题库及山东省安全员C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

JAVA 学习笔记 2年经验

文章目录 基础String、StringBuffer、StringBuilder的区别jvm堆和栈的区别垃圾回收标记阶段清除阶段 异常类型双亲委派机制hashmap和hashtable concurrentHashMap 1.7和1.8的区别java的数据结构排序算法&#xff0c;查找算法堆排序 ThreadLocal单例模式常量池synchronizedsynch…

JavaScript系列从入门到精通系列第十四篇:JavaScript中函数的简介以及函数的声明方式以及函数的调用

文章目录 一&#xff1a;函数的简介 1&#xff1a;概念和简介 2&#xff1a;创建一个函数对象 3&#xff1a;调用函数对象 4&#xff1a;函数对象的普通功能 5&#xff1a;使用函数声明来创建一个函数对象 6&#xff1a;使用函数声明创建一个匿名函数 一&#xff1a;函…

tiny模式基本原理整合

【Tiny模式】的基本构成 M【首头在首位】 U【/】 V【HTTP/】 Host H【真实ip】 XH \r回车 \n换行 \t制表 \ 空格 一个基本的模式构成 [method] [uri] [version]\r\nHost: [host]\r\n[method] [uri] [version]\r\nHost: [host]\r\n 检测顺序 http M H XH 有些地区 XH H M 我这边…

MySQL - mysql服务基本操作以及基本SQL语句与函数

文章目录 操作mysql客户端与 mysql 服务之间的小九九了解 mysql 基本 SQL 语句语法书写规范SQL分类DDL库表查增 mysql数据类型数值类型字符类型日期类型 示例修改&#xff08;表操作&#xff09; DML添加数据删除数据修改数据 DQL查询多个字段条件查询聚合函数分组查询排序查询…

python模拟表格任意输入位置

在表格里输入数值&#xff0c;要任意位置&#xff0c;我找到了好方法&#xff1a; input输入 1. 行 2. 列输入&#xff1a;1 excel每行输入文字input输入位置 3.2 表示输入位置在&#xff1a;3行个列是要实现一个类似于 Excel 表格的输入功能&#xff0c;并且希望能够指定输入…

oracle GBK未定义编码使用Unicode写入特殊字符e000迁移lightdb-x测试

E:\HS\LightDBSVN\23.3sql文件\迁移工具\caofa\config\application.properties gbk-->uft8: logging.configclasspath:log4j2.xml # ???? etl.global.sourceDatabaseoracle etl.global.targetDatabaselightdb etl.global.showSqlfalse etl.global.fastFailfalse etl.g…

数据结构之双链表

双链表 1.复杂方法的图分析2.My_LinkedList代码3.接口MY_lIST4.测试类 1.复杂方法的图分析 2.My_LinkedList代码 package My_liNKEDlIST;public class My_LinkedList implements MY_lIST{static class ListNode{public int val;public ListNode prev;public ListNode next;pub…

git 分支管理进阶

目录 1. merge 命令&#xff1a;git merge A 2. rebase 命令&#xff1a;git rebase A 命令&#xff1a;git rebase B A 3. 指针——分支切换 3.1哈希值方式 3.2相对引用 3.3综合练习 4.撤销 4.1 本地分支 reset 4.2 远程分支 revert 5.Cherry-pick与交互式的 …

十天学完基础数据结构-第三天(数组(Array))

数组的基本概念 数组是一种线性数据结构&#xff0c;用于存储相同数据类型的元素。它具有以下基本概念&#xff1a; 元素&#xff1a;数组中的每个数据项称为元素&#xff0c;可以是整数、浮点数、字符等。 索引&#xff1a;每个元素在数组中都有一个唯一的位置&#xff0c;称…

Linux--socket编程

socket套接字编程 一、服务器和客户端的开发步骤&#xff1a; 1、创建套接字 2、为套接字添加信息&#xff08;ip地址和端口号&#xff09; 3、监听网络连接 4、监听到有客户端接入&#xff0c;接受连接&#xff08;如没有接入&#xff0c;会发生阻塞到&#xff09; 5、数据…

flink处理函数--副输出功能

背景 在flink中&#xff0c;如果你想要访问记录的处理时间或者事件时间&#xff0c;注册定时器&#xff0c;或者是将记录输出到多个输出流中&#xff0c;你都需要处理函数的帮助&#xff0c;本文就来通过一个例子来讲解下副输出 副输出 本文还是基于streaming-with-flink这本…

概率密度函数,概率分布函数

概率密度函数&#xff1a;描述信号的取值在某个确定的取值点附近的概率的函数&#xff1b;概率分布函数的导数。 以幅值大小为横坐标&#xff0c;以每个幅值间隔内出现的概率为纵坐标进行统计分析。反映了信号落在不同幅值强度区域内的概率情况。 直方图&#xff1a;对每个幅…

数据结构--队列与循环队列的实现

数据结构–队列的实现 1.队列的定义 比如有一个人叫做张三,这天他要去医院看病,看病时就需要先挂号,由于他来的比较晚,所以他的号码就比较大,来的比较早的号码就比较小,需要到就诊窗口从小号到大依次排队,前面的小号就诊结束之后,才会轮到大号来,小号每就诊完毕就销毁,每新来…

基于Java的火车高铁订票购票系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

支持向量机SVM:从数学原理到实际应用

目录 一、引言背景SVM算法的重要性 二、SVM基础线性分类器简介什么是支持向量&#xff1f;超平面和决策边界SVM的目标函数 三、数学背景和优化拉格朗日乘子法&#xff08;Lagrange Multipliers&#xff09;KKT条件核技巧&#xff08;Kernel Trick&#xff09;双重问题和主问题&…

【云备份】

文章目录 [toc] 1 :peach:云备份的认识:peach:1.1 :apple:功能了解:apple:1.2 :apple:实现目标:apple:1.3 :apple:服务端程序负责功能:apple:1.4 :apple:服务端功能模块划分:apple:1.5 :apple:客户端程序负责功能:apple:1.6 :apple:客户端功能模块划分:apple: 2 :peach:环境搭建…

留住时光、固化时间、让一瞬成为永恒——全新的真人手办定制模式,就选易模小程序制作。

如何能永远留住一瞬间&#xff1f; 有人说我可以拍摄一张照片&#xff0c;照片的问世确实给生活中许多美好的瞬间留下了可以记录的工具。但是随着时间的流逝&#xff0c;照片终究也会泛黄&#xff0c;似乎有一些记忆的温度&#xff0c;有一些岁月的棱角&#xff0c;也是照片所给…