Pandas:如果某个值存在于具有映射条件的特定列中,则创建具有特定时间索引值的新列



这是我的输入(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

相关内容

  • 没有找到相关文章

最新更新