我试图创建一个基于另外两个DataFrame df3的DataFrames df1和df2。如果df1中的值大于或等于df2中的值,那么我希望在df3中赋值1,否则给0赋值。
这将是一个示例数据,以供说明:
df1
Date 01K 02K 03K 04K
0 2021-01-01 NaN 3.5 4.2 NaN
1 2021-01-02 2.3 0.1 5.2 2.6
2 2021-01-03 0.3 NaN 2.5 8.2
3 2021-01-04 0.4 NaN 3.0 4.2
df2
Date 01K 02K 03K 04K
0 2021-01-01 NaN NaN NaN NaN
1 2021-01-02 2.5 0.6 5.8 2.3
2 2021-01-03 0.2 NaN 2.5 8.1
3 2021-01-04 0.3 NaN 2.8 4.2
df3
Date 01K 02K 03K 04K
0 2021-01-01 0 0 0 0
1 2021-01-02 0 0 0 1
2 2021-01-03 1 0 1 1
3 2021-01-04 1 0 1 1可复制性:
df1 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K':['NaN', 2.3, 0.3, 0.4],
'02K':[3.5, 0.1, 'NaN', 'NaN'],
'03K':[4.2, 5.2, 2.5, 3.0],
'04K':['NaN', 2.6, 8.2, 4.2]})
df1 = df1.replace('NaN',np.nan)
df2 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K':['NaN', 2.5, 0.2, 0.3],
'02K':['NaN', 0.6, 'NaN', 'NaN'],
'03K':['NaN', 5.8, 2.5, 2.8],
'04K':['NaN', 2.3, 8.1, 4.2]})
df2 = df2.replace('NaN',np.nan)我试着用np.where()来做这件事,但是我得到了一个数组作为输出。
df3 = np.where(df1>=df2, 1, 0)
array([[1, 0, 0, 0, 0],
[1, 0, 0, 0, 1],
[1, 1, 0, 1, 1],
[1, 1, 0, 1, 1]])是否有一种有效的方法来为大型数据集创建具有与其他DataFrames相同结构的DataFrames?
非常感谢!
发布于 2021-12-01 10:11:55
在这两种情况下都将Date转换为DatetimeIndex,因此与将True, Falses映射为1, 0的整数转换为整数相比是可能的。
df1 = df1.set_index('Date')
df2 = df2.set_index('Date')
df3 = (df1>=df2).astype(int)如果需要,则使用1使用-1:
df3 = (df1>=df2).astype(int).mul(-1)
df3 = pd.DataFrame(np.where(df1>=df2, -1, 0),
index=df1.index,
columns=df1.columns)https://stackoverflow.com/questions/70182335
复制相似问题