我有一个如下数据框:
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
你能建议怎么做吗?
谢谢!
插口