【发布时间】:2018-08-20 16:33:35
【问题描述】:
我有一个如下数据框:
test = pd.DataFrame({'ID':[4, 5, 6, 6, 6, 7, 7, 7], 'val1':['one', 'one', 'two', 'two', 'three', np.nan, 'seven', 'seven'], 'val2':['hi', 'bye', 'hola', 'hola', 'hola', 'ciao', 'ciao', 'namaste'], 'val3':[3, 3, 4, np.nan, 4, 5, 5, 6]})
test
ID val1 val2 val3
0 4 one hi 3.0
1 5 one bye 3.0
2 6 two hola 4.0
3 6 two hola NaN
4 6 three hola 4.0
5 7 NaN ciao 5.0
6 7 seven ciao 5.0
7 7 seven namaste 6.0
每个 ID 都有一些测量值,其中一些 ID 一式三份。
如果特定列的复制 ID 之间存在任何分歧,那么我希望新数据框具有该值的 NaN。
如果一个值已经存在 NaN(认为它未测量),但该复制样本的另外两个匹配,那么我希望该协议出现在最终数据框中。如果存在值的两者之间存在分歧,则为 NaN。
我正在考虑使用 pandas groupby 然后对此进行聚合,但我不确定如何执行聚合函数的逻辑。
基本上我正在寻找的输出是这样的:
pd.DataFrame({'ID':[4, 5, 6, 7], 'val1':['one', 'one', np.nan, 'seven'], 'val2':['hi', 'bye', 'hola', np.nan], 'val3':[3, 3, 4, np.nan]})
ID val1 val2 val3
0 4 one hi 3.0
1 5 one bye 3.0
2 6 NaN hola 4.0
3 7 seven NaN NaN
你能建议怎么做吗?
谢谢!
杰克
【问题讨论】:
标签: python python-3.x pandas