这是我的输入(pandas DataFrame):
timestamp identification value identification_bis value_bis
2021-10-07 10:00:01 123456789 1000
2021-10-07 10:00:05 123456789 900
2021-10-07 10:00:10 123456789 100
这是我想要的:
timestamp identification value event_time value_bis
2021-10-07 10:00:01 123456789 1000 2021-10-07 10:00:05 900
2021-10-07 10:00:01 123456789 1000 2021-10-07 10:00:10 100
因此,在列identiation_bis中存在value意味着存在一个事件,我应该创建一个新列,将该事件的时间映射到标识列上。我试过使用数据透视表,但我觉得这可能不是最好的方法
提前感谢,这个真的很困难
将数据框架分成两部分并合并:
# Create a boolean mask
mask = df['identification'] != ''
# Split in 2 dataframes
df1 = df.loc[mask, ['timestamp', 'identification', 'value']]
df2 = df.loc[~mask, ['timestamp', 'identification_bis', 'value_bis']]
# Rename columns for the final output
df2 = df2.rename(columns={'identification_bis': 'identification',
'timestamp': 'event_time'})
# Merge dataframes on right
out = df1.merge(df2, how='right', on='identification')
注意:这里的键是布尔掩码。我使用空字符串来确定每行应该放在哪个数据帧中。你可以使用任何你想要的遮罩,但思路是一样的。
输出:
>>> out
timestamp identification value event_time value_bis
0 2021-10-07 10:00:01 123456789 1000 2021-10-07 10:00:05 900
1 2021-10-07 10:00:01 123456789 1000 2021-10-07 10:00:10 100