Pandas dataframe:如果时间戳相同,则传播True值

时间:2015-07-08 18:06:08

标签: python pandas dataframe

最好通过一个例子来描述。输入是

   ts    val
0   10  False
1   20   True
2   20  False
3   30   True
4   40  False
5   40  False
6   40  False
7   60   True
8   60  False

期望的输出是

   ts    val
0   10  False
1   20   True
2   20   True
3   30   True
4   40  False
5   40  False
6   40  False
7   60   True
8   60  True

这个想法如下:如果我们在同一个ts簇中看到至少一个True值(即相同的ts值),则使所有其他值为True,它们具有完全相同的时间戳。

1 个答案:

答案 0 :(得分:3)

您可以在列'ts'上使用groupby,然后使用apply使用.any()来确定群集中val是否为True基。

import pandas as pd

# your data
# =====================
print(df)

Out[58]: 
   ts    val    data
0  10  False  0.3332
1  20   True -0.6877
2  20  False -0.6004
3  30   True  0.1922
4  40  False  0.2472
5  40  False -0.0117
6  40  False  0.8607
7  60   True -1.1464
8  60  False  0.0698


# processing
# =====================
# as suggested by @DSM, transform is best way to do it
df['val'] = df.groupby('ts')['val'].transform(any)

Out[61]: 
   ts    val    data
0  10  False  0.3332
1  20   True -0.6877
2  20   True -0.6004
3  30   True  0.1922
4  40  False  0.2472
5  40  False -0.0117
6  40  False  0.8607
7  60   True -1.1464
8  60   True  0.0698