首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas:将带有if/else条件的for循环转换为应用方法(lambda函数)

Pandas:将带有if/else条件的for循环转换为应用方法(lambda函数)
EN

Stack Overflow用户
提问于 2020-12-28 10:26:22
回答 1查看 88关注 0票数 0

我使用for循环实现了以下函数:

代码语言:javascript
复制
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方法。类似这样的东西(不起作用):

代码语言:javascript
复制
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):

代码语言:javascript
复制
[
 {
   "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
 }
]

最后是上传数据的函数:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-28 10:31:56

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

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65472336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档