在另一列中基于上一个条件添加行

2024-03-28 16:58:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我是熊猫舱的新手。还有一个关于数据操作的快速问题:

假设我有一张如下表:

Tool | WeekNumber | Status | Percentage
-----|------------|--------|------------
  M1 |     1      |   good |     85
  M1 |     4      |   bad  |     75
  M1 |     7      |   good |     90

根据状态的情况,我想增加百分比。在

例如:

  1. 如果状态为“良好”,则后续周数的以下行应全部为100,即,下一行应为第2周和第3周的100%

  2. 如果状态为“坏”,则接下来的周数的百分比应为0,即第5周和第6周的百分比应为0。

我对如何处理条件有一些想法,但不知道如何添加行:

^{pr2}$

但是,根据条件,这只给了我三个值,并更改了特定周数的值。但我要的是:

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

Tags: 数据状态status情况tool条件百分比bad
3条回答

这是另一个

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)

你得到了

^{pr2}$

可以使用.iterrows()遍历每一行。在

for index, row in df.iterrows():
    print row.Status

>>> good
>>> bad
>>> good

如果我需要它来使用一些粗略的代码,我会使用我的代码:

^{pr2}$

你的回答是这样的:

add_rows = []
for index, elem in enumerate(df.Status):
    if elem == "good":

        # assuming data is sorted by 'WeekNumber'
        add_rows.append({'Tool': 'M1', 'WeekNumber': index + 2}) # etc
        add_rows.append({'Tool': 'M1', 'WeekNumber': index + 3}) # etc

more_data = pd.DataFrame(add_rows)
df = pd.concat([df, more_data]).sort_values(by='WeekNumber')

相关问题 更多 >