繁体   English   中英

循环通过 Pandas dataframe 在条件为真的每一行中使用顺序计数值的最佳方法是什么?

[英]What is best way to loop through Pandas dataframe employing a sequentially counted value in each row where condition is true?

业务问题:对于 Pandas 数据帧中条件为真的每一行,在列中设置值。 当连续行满足条件时,将值加一。 最终目标是创建一个包含整数的列(例如,1、2、3、4、...、n),在该列上可以制作 pivot 表。 作为旁注,将有第二个索引,pivot 将在该索引上制作。

下面是我的尝试,但我不熟悉使用 Pandas。

sales_data_cleansed_2.loc[sales_data_cleansed_2['Duplicate'] == 'FALSE', 'sales_index'] = 1 
j = 2

    # loop through whether duplicate exists.
for i in range(0, len(sales_data_cleansed_2)):
    while sales_data_cleansed_2.loc[i,'Duplicate'] == 'TRUE':
        sales_data_cleansed_2.loc[i,'sales_index'] = j 
        j = j + 1
        break
    j = 2

你可以cumsum比赛。 由于看起来您的duplicate列是 boolean,因此您可以执行类似data.duplicate.cumsum()的操作(请注意,即使该列不是 boolean,您仍然可以使用此方法,例如data[data.x > 50].cumsum() )。

import pandas as pd
data = pd.DataFrame({ 'duplicate': [False, True, False, True, True, False] })
data
复制
0 错误的
1 真的
2 错误的
3 真的
4 真的
5 错误的
data['sales_index'] = data.duplicate.cumsum()
复制 销售指数
0 错误的 0
1 真的 1
2 错误的 1
3 真的 2
4 真的 3
5 错误的 3

你可以试试:

import pandas as pd

# sample DataFrame
df = pd.DataFrame(np.random.randint(0,2, 15).astype(str), columns=["Duplicate"])
df = df.replace({'1': 'TRUE', '0':'FALSE'})

df['sales_index'] = ((df['Duplicate'] == 'TRUE')
             .groupby((df['Duplicate'] != 'TRUE')
             .cumsum()).cumsum() + 1)
print(df)

这给出了:

   Duplicate  sales_index
0      FALSE            1
1      FALSE            1
2       TRUE            2
3       TRUE            3
4       TRUE            4
5       TRUE            5
6       TRUE            6
7       TRUE            7
8       TRUE            8
9      FALSE            1
10     FALSE            1
11      TRUE            2
12      TRUE            3
13      TRUE            4
14     FALSE            1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM