当前位置: 首页 > news >正文

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

相关文章:

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

目录 往期内容&#xff1a;第一期&#xff1a;Pandas基础&#xff08;1-20题&#xff09;第二期&#xff1a;Pandas数据处理&#xff08;21-50题&#xff09;第三期&#xff1a;Pandas金融数据处理&#xff08;51-80题&#xff09;第四期&#xff1a;当Pandas遇上NumPy&#xf…...

NPDP产品经理知识(产品创新管理)

复习文化&#xff0c;团队与领导力 产品创新管理&#xff1a; 如何树立愿景&#xff1a; 如何实现产品战略 计划 实施产品开发&#xff1a; 商业化&#xff0c;营销计划&#xff0c;推广活动 管理产品生命周期&#xff1a; 新式走向市场的流程&#xff1a;...

Flutter+SpringBoot实现ChatGPT流实输出

FlutterSpringBoot实现ChatGPT流式输出、上下文了连续对话 最终实现Flutter的流式输出上下文连续对话。 这里就是提供一个简单版的工具类和使用案例&#xff0c;此处页面仅参考。 服务端 这里直接封装提供工具类&#xff0c;修改自己的apiKey即可使用&#xff0c;支持连续…...

淘宝天猫粉丝福利购店铺优惠券去哪里找到领取网站?

淘宝天猫优惠券去哪里找到领取网站&#xff1f; 领取淘宝天猫粉丝福利购优惠券可通过百度搜索&#xff1a;草柴&#xff0c;进入草柴官方网站 或 手机应用商店搜索&#xff1a;草柴&#xff0c;下载安装草柴APP&#xff0c;就可以领取淘宝天猫优惠券&#xff1b; 草柴APP如何领…...

【考研复习】union有关的输出问题

文章目录 遇到的问题正确解答拓展参考文章 遇到的问题 首次遇到下面的代码时&#xff0c;感觉应该输出65,323。深入理解union的存储之后发现正确答案是&#xff1a;67,323. union {char c;int i; } u; int main(){u.c A;u.i 0x143;printf("%d,%d\n", u.c, u.i); …...

Android学习之路(16) Android 数据库Litepal

一.LitePal的介绍 Litepal是Android郭霖大神的一个开源Android数据库的开源框架&#xff0c;它采用了对象关系映射&#xff08;ORM&#xff09;的模式&#xff0c;这是让我们非常好的理解的数据库&#xff0c;一个实体类对应我们数据库中的一个表。该库中还封装了许多的方法&a…...

Redis持久化(RDB/AOF)

"在哪里走散&#xff0c;你都会 找 到 我。" 认识持久化 我们在接触Mysql事务的时候&#xff0c;一定了解过Mysql事务的四个特性: "原子性(A)一致性(C)隔离性(I)持久性(D)" 而其中持久性其实与持久化是一回事&#xff0c;所谓持久与不持久&#x…...

小谈设计模式(15)—观察者模式

小谈设计模式&#xff08;15&#xff09;—观察者模式 专栏介绍专栏地址专栏介绍 观察者模式核心思想主要角色Subject&#xff08;被观察者&#xff09;ConcreteSubject&#xff08;具体被观察者&#xff09;Observer&#xff08;观察者&#xff09;ConcreteObserver&#xff0…...

简单工厂模式 创建型模式(非GoF经典设计模式)

简单工厂模式是属于创建型模式&#xff0c;也因为工厂中的方法一般设置为静态&#xff0c;又叫做静态工厂方法&#xff08;Static Factory Method&#xff09;模式&#xff0c;但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工…...

PE文件之导入表

1. 导入表 2. 显示导入表信息的例子 ; 作用: 将RVA地址转成FOA即文件偏移 ; 参数: _pFileHdr 指向读到内存中文件的基址指针 ; _dwRVA 目标RVA地址 ; 返回: 目标RVA转成文件偏移的值 RVA2FOA PROC USES esi edi edx, _pFileHdr:PTR BYTE, _dwRVA:DWORDmov esi, _pFil…...

二、码制及其转换

原码 根据我们所学可知&#xff0c;数字电路的逻辑电路是通过输出0和1来表示二进制数的&#xff0c;那么这个二进制数的正负又该怎么表示呢&#xff1f; 答案是在这个二进制数的最高位作为符号位来表示正负性&#xff0c;用0正数&#xff0c;用1表示负数&#xff0c;在这种表达…...

在pycharm中出现下载软件包失败的解决方法

一. 一般情况下我们会选择在设置中下载软件包,过程如下. 1. 直接点击左上角的文件, 再点击设置, 再点击项目, 在右边选择python解释器,点击号,输入要下载的软件包, 在下面的一系列的包中选择相对应的包,点击安装就可以了,有的时候我们下载的是最新的版本,如果要下载固定的版本…...

10.0 探索API调试事件原理

本章笔者将通过Windows平台下自带的调试API接口实现对特定进程的动态转存功能&#xff0c;首先简单介绍一下关于调试事件的相关信息&#xff0c;调试事件的建立需要依赖于DEBUG_EVENT这个特有的数据结构&#xff0c;该结构用于向调试器报告调试事件。当一个程序发生异常事件或者…...

文心一言 VS 讯飞星火 VS chatgpt (104)-- 算法导论10.1 2题

二、用go语言&#xff0c;说明如何在一个数组 A[1…n]中实现两个栈&#xff0c;使得当两个栈的元素个数之和不为 n 时&#xff0c;两者都不会发生上溢。要求 PUSH 和 POP 操作的运行时间为 O(1)。 文心一言&#xff1a; 在这个问题中&#xff0c;我们要在一个数组 A[1…n] 中…...

检测防火墙是否开启、判断程序是否加入防火墙白名单(附源码)

VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&a…...

vtk 动画入门 1 代码

实现效果如图&#xff1a; #include <vtkAutoInit.h> //VTK_MODULE_INIT(vtkRenderingOpenGL2); //VTK_MODULE_INIT(vtkInteractionStyle); VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); //VTK_MODULE_INIT(vtkRenderingFreeType); #in…...

【VR】【unity】如何在VR中实现远程投屏功能?

【背景】 目前主流的VD应用,用于娱乐很棒,但是用于工作还是无法效率地操作键鼠。用虚拟键盘工作则显然是不现实的。为了让自己的头显能够起到小面积代替多显示屏的作用,自己动手开发投屏VR应用。 【思路】 先实现C#的投屏应用。研究如何将C#投屏应用用Unity 3D项目转写。…...

OpenGl材质

在现实世界里,每个物体会对光产生不同的反应。比如,钢制物体看起来通常会比陶土花瓶更闪闪发光,一个木头箱子也不会与一个钢制箱子反射同样程度的光。有些物体反射光的时候不会有太多的散射(Scatter),因而产生较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的…...

背包问题

目录 开端 01背包问题 AcWing 01背包问题 Luogu P2925干草出售 Luogu P1048采药 完全背包问题 AcWing 完全背包问题 Luogu P1853投资的最大效益 多重背包问题 AcWing 多重背包问题 I AcWing 多重背包问题 II Luogu P1776宝物筛选 混合背包问题 AcWing 混合背包问题…...

JavaSE | 初始Java(十一) | 抽象类和抽象接口

抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c; 如果 一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类 在 Java 中&#xff0c;一个…...

产品经理如何科学的进行需求调研?

导语&#xff1a;作为产品经理&#xff0c;需求调研是开展工作的重要环节之一。科学、有效地进行需求调研不仅可以帮助产品经理更好地了解用户需求&#xff0c;还能指导产品设计和功能开发&#xff0c;提升产品的竞争力。本文将介绍几种科学的方法和技巧&#xff0c;帮助产品经…...

AI智能问答系统源码/AI绘画商业系统/支持GPT联网提问/支持Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图…...

玩具玩偶配送经营商城小程序的作用是什么?

玩具玩偶是小孩子们喜欢的产品&#xff0c;其市场需求度很高&#xff0c;以前玩具店里总是不缺乏客户&#xff0c;但现在随着人们生活品牌提升及消费形式改变&#xff0c;无论玩具厂商还是门店经销商都面对着不少痛点&#xff1a; 如拓客引流难、线上销售经营难、营销难、分销…...

latex表格内容换行

问题描述&#xff1a; 在用latex表格中编写公式时&#xff0c;可能出现公式太长&#xff0c;表格中后面的内容不能在文档中呈现&#xff0c;如下图1&#xff0c;故要进行行内内容的换行&#xff0c;使内容呈现完全而传统的\换行后,换行内容会顶格&#xff0c;如图2。 解决方…...

2023 牛客国庆day4 【10.2训练补题】

目录 B-Basic Gcd Problem&#xff08;素数筛快速幂&#xff09; H-Harder Gcd Problem&#xff08;素数&#xff09; B-Basic Gcd Problem&#xff08;素数筛快速幂&#xff09; 打表找规律发现答案为 (n质因子数目)^c #include<bits/stdc.h> using namespace std;…...

android的USB开发时 mUsbManager.getDeviceList()获取都为空

类提供的主要方法有&#xff1a; getDeviceList() 获得设备列表&#xff0c;返回的是一个HashMap.;hasPermission(UsbDevice device) 判断你的应用程序是否有接入此USB设备的权限&#xff0c;如果有则返回真&#xff0c;否则返回false.openDevice(UsbDevice device) 打开USB设…...

SpringCloud Alibaba - Seata 部署 TC 服务,并集成微服务

目录 一、Seata 架构 1.1、Seata 架构重要角色 1.2、部署 TC 服务 1.2.1、前言 1.2.2、下载 seata-server 包&#xff0c;解压 1.2.3、修改配置 1.2.4、在 nacos 中添加配置 1.2.5、创建数据库表 1.2.6、启动 TC 服务 1.3、微服务集成 Seata 1.3.1、引入依赖 1.3.2、…...

Java基础面试,接口和抽象类的区别?

接口和抽象类的区别&#xff1f; 抽象类可以存在普通成员函数&#xff0c;而接口中只能存在public abstract 方法。抽象类中的成员变量可以是各种类型的&#xff0c;而接口中的成员变量只能是public static final类型的.抽象类只能继承一个&#xff0c;接口可以实现多个。 接…...

《视觉 SLAM 十四讲》V2 第 4 讲 李群与李代数 【什么样的相机位姿 最符合 当前观测数据】

P71 文章目录 4.1 李群与李代数基础4.1.3 李代数的定义4.1.4 李代数 so(3)4.1.5 李代数 se(3) 4.2 指数与对数映射4.2.1 SO(3)上的指数映射罗德里格斯公式推导 4.2.2 SE(3) 上的指数映射SO(3),SE(3),so(3),se(3)的对应关系 4.3 李代数求导与扰动模型4.3.2 SO(3)上的李代数求导…...

【深蓝学院】手写VIO第4章--基于滑动窗口算法的 VIO 系统:可观性和 一致性--笔记

0. 内容 T1. 参考SLAM14讲P247直接可写&#xff0c;注意 ξ 1 , ξ 2 \xi_1,\xi_2 ξ1​,ξ2​之间有约束&#xff08;关系&#xff09;。 套用舒尔补公式&#xff1a; marg掉 ξ 1 \xi_1 ξ1​之后&#xff0c;信息被传递到 L 1 和 L 2 L_1和L_2 L1​和L2​之间了。 T2....

绍兴做网站选哪家/建立网站的软件

shell字符串的截取的问题&#xff1a; 一、Linux shell 截取字符变量的前8位&#xff0c;有方法如下&#xff1a; 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr(,1,8)}’ 3.echo $a|cut -c1-8 4.expr $a : ‘\(.\\).*’ 5.echo $a|dd bs1 count8 2>/dev/null 二…...

深圳网站优化提供商/seo怎么优化简述

我曾经一直想加入到开源项目中&#xff0c;但是因为没有人指导流程&#xff0c;网上看了很多&#xff0c;基本都是说了个大概&#xff0c;如果你也是一个初出茅庐的人&#xff0c;那么&#xff0c;我将以自己提交的一次开源代码为例&#xff0c;教会你步入开源的世界。1,首先登…...

网站滚动的图片是怎么做的/长沙seo免费诊断

导语大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;你的老朋友&#xff0c;老K。 本文来自高工产研研究。仅供参考。剑蓝错知识星球 * 原创电子书 * 深海社区 * 微信群 知名企业-智能仓储物流技术研习社-建立智能物流系统甲方、集成商与周边配套商共同技术语…...

做神马网站快/seo怎么优化排名

正在学习iOS开发。如果玩玩的话mac里的模拟器就够用了&#xff0c;但由于mac模拟器的内存运算能力比真机强多了&#xff0c;好多问题不用真机测一下还发现不了。和Android开发不一样&#xff0c;iOS开发本身就是个费钱的玩意儿&#xff0c;首先得有个Mac机器&#xff0c;最不济…...

湖南网站制作/站长之家网站排行榜

方法中返回的对象&#xff0c;一般不会造成内存溢出&#xff0c;但是一下情况就是刚好造成的内容溢出&#xff1a; 如果对象的引用刚好被单例所持有的话&#xff0c;JVM就不会回收该引用。 1、创建对象 Info info new Info(); 复制代码new Info()的时候&#xff0c;会返回一个…...

唐山做网站公司哪家好/优化官网咨询

http://www.cnblogs.com/littlemonk/p/5500801.html这篇文章主要介绍了Angularjs中UI Router全攻略&#xff0c;涉及到angularjs ui router的基本用法&#xff0c;需要的朋友参考下吧首先给大家介绍angular-ui-router的基本用法。 如何引用依赖angular-ui-router angular.modul…...