我是 pandas 模块的新手。并有一个关于数据操作的简单问题:
假设我有一个如下表:
Tool | WeekNumber | Status | Percentage
-----|------------|--------|------------
M1 | 1 | good | 85
M1 | 4 | bad | 75
M1 | 7 | good | 90
根据状态中的条件,我想添加百分比。
例如:
如果状态为“良好”,则后续周数的以下行应全部为 100,即接下来的行应为第 2 周和第 3 周,且为 100%
如果状态为“不良”,则接下来的周数的百分比应为 0,即第 5 周和第 6 周为 0。
我对如何处理条件有一些想法,但不知道添加行:
import os, re
import pandas as pd
df = pd.read_excel("test.xlsx")
add_rows = []
for elem in df.Status:
if elem == "good":
add_rows.append(100)
if elem == "bad":
add_rows.append(0)
df.Percent = pd.Series(add_rows)
但是,这仅根据条件给了我三个值,并更改了特定周数的值。但我想要以下内容:
Tool | WeekNumber | Status | Percentage
-----|------------|--------|------------
M1 | 1 | good | 85
M1 | 2 | good | 100
M1 | 3 | good | 100
M1 | 4 | bad | 75
M1 | 5 | bad | 0
M1 | 6 | bad | 0
M1 | 7 | good | 90
最佳答案
这是另一个
val = pd.DataFrame({'WeekNumber':np.arange(df['WeekNumber'].min(), df['WeekNumber'].max()+ 1, 1)})
new_df = df.merge(val, on='WeekNumber', how = 'outer').sort_values(by = 'WeekNumber').reset_index(drop = True)
new_df[['Tool', 'Status']] = new_df[['Tool', 'Status']].ffill()
new_df['Percentage'] = np.where((new_df['Status'] == 'good') &
new_df['Percentage'].isnull(), 100, new_df['Percentage'])
new_df['Percentage'] = new_df['Percentage'].fillna(0)
你得到了
Tool WeekNumber Status Percentage
0 M1 1 good 85.0
1 M1 2 good 100.0
2 M1 3 good 100.0
3 M1 4 bad 75.0
4 M1 5 bad 0.0
5 M1 6 bad 0.0
6 M1 7 good 90.0
关于python - 根据另一列中的先前条件添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229738/