OBJECT STATE SM4
TIMESTAMP
2017-10-31 11:09:09 SM4 Movement 1
2017-10-31 11:09:10 SM4 Movement 1
2017-10-31 11:09:11 SM4 No movement 0
2017-10-31 11:09:12 SM4 No movement 0
2017-10-31 11:09:13 SM4 No movement 0
2017-10-31 11:09:14 SM4 No movement 0
2017-10-31 11:09:15 SM4 No movement 0
2017-10-31 11:29:42 M01 Open 0
2017-10-31 11:29:43 M01 Open 0
2017-10-31 11:29:44 M01 Close 0TIMESTAMP列是索引。OBJECT、STATE和SM4都是列。我使用以下代码添加了一个新的列SM4。如果STATE等于Movement,则它添加值1,否则为对象SM4添加值0。
df['SM4'] = df.OBJECT.str.contains('SM4').astype(int) & df.STATE.str.contains('Movement').astype(int)现在,在OBJECT列中,我有14个独特的传感器:'SM4', 'C14', 'SM3', 'M01', 'D07', 'C10', 'C08', 'C09', 'SM1', 'D10', 'D01', 'D02', 'D03', 'C12'。
我想对所有传感器自动执行相同的操作,而不是手动创建每一列可能有一个循环,对于某些传感器,状态是Open或Pressure而不是Movement。
我如何在循环中做到这一点,以便根据代码中的条件自动添加所有列?
发布于 2019-09-09 00:04:49
我假设我的名为df的示例数据框如下所示:
OBJECT STATE
0 SM4 Movement
1 SM4 Movement
2 SM4 No movement
3 SM4 No movement
4 SM4 No movement
5 SM4 No movement
6 SM4 No movement
7 M01 Open
8 M01 Open
9 M01 Close您可以迭代OBJECT列中的唯一值,并基于如下条件创建新列:
for obj in df['OBJECT'].unique():
condition = (df['OBJECT']==obj) & (df['STATE'].isin(['Movement', 'Open', 'Pressure']))
df[obj] = np.where(condition, 1, 0)结果如下:
OBJECT STATE SM4 M01
0 SM4 Movement 1 0
1 SM4 Movement 1 0
2 SM4 No movement 0 0
3 SM4 No movement 0 0
4 SM4 No movement 0 0
5 SM4 No movement 0 0
6 SM4 No movement 0 0
7 M01 Open 0 1
8 M01 Open 0 1
9 M01 Close 0 0https://stackoverflow.com/questions/57254689
复制相似问题