熊猫:将具有if / else条件的for循环转换为apply方法(lambda函数)

照亮

我有以下for循环功能:

def add_CQI_iterrows(df):
    previous_row = df['Date'].astype(str)[0]
    CQI_index = 0
    series = []

    for index, row in df.iterrows():
        if row['Date'] == previous_row:       
            previous_row = row['Date']
            print(CQI_index)
        else:
            CQI_index += 1
            previous_row = row['Date']      
        series.append(CQI_index)
    df['CQI'] = series
    
    return df

我想找到一种方法将此for循环转换为apply方法。像这样的东西(不起作用):

def add_CQI_apply(df):
    previous_row = df['Date'].astype(str)[0]
    CQI_index = 1
    series = []
    
    df['CQI'] = df.apply(lambda row: previous_row = row['Date'] if row['Date'] == previous_row else CQI_index += 1 and previous_row = row['Date'], axis=1)
    
    return df

我想进行此转换,是因为我想了解一下apply方法的运行速度,以及是否有可能对Pandas系列进行apply方法的矢量化。

这是我的数据(data.json):

[
 {
   "Date": "9/20/2020 8:50",
   "UE": 1
 },
 {
   "Date": "9/20/2020 8:50",
   "UE": 2
 },
 {
   "Date": "9/20/2020 8:50",
   "UE": 3
 },
 {
   "Date": "9/20/2020 8:57",
   "UE": 1
 },
 {
   "Date": "9/20/2020 8:57",
   "UE": 8
 },
 {
   "Date": "9/20/2020 8:57",
   "UE": 2
 },
 {
   "Date": "9/20/2020 9:12",
   "UE": 1
 },
 {
   "Date": "9/20/2020 9:12",
   "UE": 5
 },
 {
   "Date": "9/20/2020 9:12",
   "UE": 3
 },
 {
   "Date": "9/20/2020 9:20",
   "UE": 1
 },
 {
   "Date": "9/20/2020 9:20",
   "UE": 4
 },
 {
   "Date": "9/20/2020 9:20",
   "UE": 3
 }
]

最后是上传数据的功能:

def upload_data(file):
    df = pd.read_json(file)
    df['Date'] = pd.to_datetime(df['Date'], format="%Y-%d-%m %H:%M:%S") 
    df['CQI'] = np.nan
    return df
阿西什·M。

df['CQI'] = (df['Date'] != df['Date'].shift()).cumsum()

In [120]: (df['Date'] != df['Date'].shift()).cumsum()
Out[120]:
0     1
1     1
2     1
3     2
4     2
5     2
6     3
7     3
8     3
9     4
10    4
11    4
Name: Date, dtype: int64

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将熊猫数据框转换为具有列名称的numpy数组

来自分类Dev

使用Apply将R循环转换为函数形式

来自分类Dev

将具有奇异时间戳的数据帧转换为具有熊猫的时间序列

来自分类Dev

熊猫:如何将具有多个值的单元格转换为多行?

来自分类Dev

熊猫:如何将具有多个值的单元格转换为多行?

来自分类Dev

Scala将For循环转换为函数方法

来自分类Dev

熊猫将具有unix时间戳(以毫秒为单位)的行转换为日期时间

来自分类Dev

使用熊猫将具有多行的数据框转换为一行?

来自分类Dev

将lambda转换为函数/方法

来自分类Dev

如何将具有所有数据的熊猫数据框转换为多列?

来自分类Dev

将Lambda函数转换为if else语句

来自分类Dev

熊猫groupby将系列转换为具有最大数量值的数据框

来自分类Dev

将数据从行转换为具有熊猫中特定结构的列

来自分类Dev

熊猫:将数据框中的单行转换为具有多个维度的列表

来自分类Dev

熊猫-将函数应用于具有来自不同列的多个参数的数据框

来自分类Dev

如何将具有行和列标签的矩阵外观数据框转换为常规的熊猫数据框?

来自分类Dev

如何将熊猫数据框的第一个标头转换为具有相同ID的行

来自分类Dev

使用熊猫中的循环将具有多个不同dtype的Multiple Columns dtype更改为

来自分类Dev

当您具有许多具有不同列名的不同CSV时,将熊猫转换为sqlalchemy

来自分类Dev

熊猫转换具有特定字符的行

来自分类Dev

熊猫:如何将具有重复索引值的数据框转换为字典

来自分类Dev

如何将熊猫数据框转换为具有列名称的numpy数组

来自分类Dev

熊猫:具有多种条件的分组

来自分类Dev

将具有列表值的熊猫系列转换为布尔数据框

来自分类Dev

将列的值替换为在熊猫的其他列中具有特定值的均值

来自分类Dev

将具有奇异时间戳的数据帧转换为具有熊猫的时间序列

来自分类Dev

将规则应用于熊猫中具有外部条件的列

来自分类Dev

将具有单个值列表的熊猫列转换为行

来自分类Dev

将具有相同索引的熊猫系列列表转换为字典

Related 相关文章

  1. 1

    如何将熊猫数据框转换为具有列名称的numpy数组

  2. 2

    使用Apply将R循环转换为函数形式

  3. 3

    将具有奇异时间戳的数据帧转换为具有熊猫的时间序列

  4. 4

    熊猫:如何将具有多个值的单元格转换为多行?

  5. 5

    熊猫:如何将具有多个值的单元格转换为多行?

  6. 6

    Scala将For循环转换为函数方法

  7. 7

    熊猫将具有unix时间戳(以毫秒为单位)的行转换为日期时间

  8. 8

    使用熊猫将具有多行的数据框转换为一行?

  9. 9

    将lambda转换为函数/方法

  10. 10

    如何将具有所有数据的熊猫数据框转换为多列?

  11. 11

    将Lambda函数转换为if else语句

  12. 12

    熊猫groupby将系列转换为具有最大数量值的数据框

  13. 13

    将数据从行转换为具有熊猫中特定结构的列

  14. 14

    熊猫:将数据框中的单行转换为具有多个维度的列表

  15. 15

    熊猫-将函数应用于具有来自不同列的多个参数的数据框

  16. 16

    如何将具有行和列标签的矩阵外观数据框转换为常规的熊猫数据框?

  17. 17

    如何将熊猫数据框的第一个标头转换为具有相同ID的行

  18. 18

    使用熊猫中的循环将具有多个不同dtype的Multiple Columns dtype更改为

  19. 19

    当您具有许多具有不同列名的不同CSV时,将熊猫转换为sqlalchemy

  20. 20

    熊猫转换具有特定字符的行

  21. 21

    熊猫:如何将具有重复索引值的数据框转换为字典

  22. 22

    如何将熊猫数据框转换为具有列名称的numpy数组

  23. 23

    熊猫:具有多种条件的分组

  24. 24

    将具有列表值的熊猫系列转换为布尔数据框

  25. 25

    将列的值替换为在熊猫的其他列中具有特定值的均值

  26. 26

    将具有奇异时间戳的数据帧转换为具有熊猫的时间序列

  27. 27

    将规则应用于熊猫中具有外部条件的列

  28. 28

    将具有单个值列表的熊猫列转换为行

  29. 29

    将具有相同索引的熊猫系列列表转换为字典

热门标签

归档