bloomberg morningstar yahoo
0 AAPL1 AAPL2 NaN
1 AAPL1 NaN AAPL3
2 NaN GOOG4 GOOG5
3 GOOG6 GOOG4 NaN
4 IBM7 NaN IBM8
5 NaN IBM9 IBM8
6 NaN NaN FB
bloomberg morningstar yahoo
0 AAPL1 AAPL2 AAPL3
1 GOOG6 GOOG4 GOOG5
2 IBM7 IBM9 IBM8
3 NaN NaN FB
我已经充分利用了我的数据,以确保在起始数据帧的给定列中永远不会有任何“冲突”信息,例如:以下是不可能......
A column Another column
0 AAPL1 One thing
1 AAPL1 Another thing
唯一可能发生的事情是任何给定的列都有1)没有信息或2)正确的信息,例如
A column Another column
0 AAPL1 NaN
1 AAPL1 The right information
我想要做的就是用可用的“right”信息填充NaN,然后删除重复项(这应该很简单)。
但是有些NaN应该保留,因为我没有足够的数据来推断它们的价值,例如:示例中的FB行。
如果您想玩游戏,可以使用以下代码加载起始数据框:
import pandas as pd
data = [
{'bloomberg': 'AAPL1', 'morningstar': 'AAPL2'},
{'bloomberg': 'AAPL1', 'yahoo': 'AAPL3'},
{'morningstar': 'GOOG4', 'yahoo': 'GOOG5'},
{'bloomberg': 'GOOG6', 'morningstar': 'GOOG4'},
{'bloomberg': 'IBM7', 'yahoo': 'IBM8'},
{'morningstar': 'IBM9', 'yahoo': 'IBM8'},
{'yahoo': 'FB'}]
df = pd.DataFrame(data)
答案 0 :(得分:1)
链接ffill
和bfill
会做您想做的事情:
df.fillna(method='ffill', axis=1).fillna(method='bfill', axis=1).drop_duplicates()
bloomberg morningstar yahoo
0 AAPL AAPL AAPL
2 GOOG GOOG GOOG
4 IBM IBM IBM