![](/img/trans.png)
[英]Using pandas, what is the best way to go through a column in a dataframe while comparing each successive value to the previous value
[英]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.