poi*_*ter 6 python dataframe pandas
我有两个数据帧,一个是1990年开始的每日信息,另一个是2000年开始的每日信息.两个数据帧都包含2016年结束的信息.
df1:
Date A B C
1990-01-01 3.0 40.0 70.0
1990-01-02 20.0 50.0 80.0
1990-01-03 30.0 60.0 90.0
1990-01-04 2.0 1.0 1.0
1990-01-05 1.0 8.0 3.0
df2:
Date A B C
2000-01-01 NaN NaN NaN
2000-01-02 5.0 NaN NaN
2000-01-03 1.0 NaN 5.0
2000-01-04 2.0 4.0 8.0
2000-01-05 1.0 3.0 4.0
Run Code Online (Sandbox Code Playgroud)
我需要比较df1和df2中具有相同名称的列,这通常不会太复杂,但我需要从给定列的两个数据帧中可用数据的位置比较它们(例如df2,2000-01-02在列中'A',2000-01-04in 'B'.True如果它们从那一点开始是相同的,False如果它们不同,我需要返回.我从合并开始,这给了我:
df2.merge(df1, how = 'left', on = 'Date')
Date A.x B.x C.x A.y B.y C.y
2000-01-01 NaN NaN NaN 3.0 4.0 5.0
2000-01-02 5.0 NaN NaN 5.0 9.0 2.0
2000-01-03 1.0 NaN 5.0 1.0 6.0 5.0
2000-01-04 2.0 4.0 8.0 2.0 4.0 1.0
2000-01-05 1.0 3.0 4.0 1.0 3.0 3.0
Run Code Online (Sandbox Code Playgroud)
我已经找到了如何找到共同的日期,但我不知道如何进行相同/不同的比较.任何人都可以帮我比较有共同价值点的列吗?一本字典作为一种有用的输出格式浮现在脑海中,但并不重要:
comparison_dict = {
"A" : True,
"B" : True,
"C" : False
}
Run Code Online (Sandbox Code Playgroud)
非常感谢.
假设Date列是索引.
'inner'逻辑对齐Truepd.Series.eq(*df1.stack().align(df2.stack(), 'inner')).groupby(level=1).all()
Run Code Online (Sandbox Code Playgroud)
如果Date不是索引
pd.Series.eq(
*df1.set_index('Date').stack().align(
df2.set_index('Date').stack(), 'inner'
)
).groupby(level=1).all()
Run Code Online (Sandbox Code Playgroud)
检查eq和isnull数据来自user3483203
((df1.eq(df2))|df2.isnull()|df1.isnull()).all(0)
Out[22]:
A True
B True
C False
dtype: bool
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |