numpy - Numpy广播和for循环
问题描述
我有两个 pd.dataframes。
df1
Equipment_Class 0 1 2 3
PC1 8.72 7.32 0.17 0.00
PC2 19.18 10.11 8.72 0.35
df2
Year Equipment_Class 0 1 2 3
2024 PC1 0.7 0.3 0.1 0.0
2025 PC1 0.6 0.3 0.1 0.0
2026 PC1 0.6 0.3 0.1 0.0
2027 PC2 0.4 0.5 0.1 0.0
2028 PC2 0.2 0.5 0.1 0.2
2029 PC2 0.3 0.5 0.1 0.1
如果 Equipment_Class 在两个 dfs 中都匹配,我想将 df1.loc[0, "0":"3"] 和 df2.loc[0:, "0":"3"] 相乘,即 Equipment_class == "PC1"或“PC2”
我也想做一个 for 循环,所以我不必手动添加列。
到目前为止,以下是我的代码:
df3=pd.DataFrame(columns=['PC1','PC2'])
col_names=df1.Equipment_Class
for incol,df3column in zip(col_names, df3.columns):
df3[df3column]=df1.loc[df1.Equipment_Class==incol, "0":"3"].to_numpy()
[None,:]*df2.loc[df2.Equipment_Class==incol, "0":"3"]
我收到以下错误消息: ValueError: Unable to coerce to Series/DataFrame, dim must be <= 2: (1, 1, 4)
谢谢您的帮助。
解决方案
df1=pd.read_csv('input.txt', delim_whitespace=True).set_index('Equipment_Class')
df2=pd.read_csv('input2.txt', delim_whitespace=True).set_index('Equipment_Class')
print(df1.mul(df2.drop('Year', 1), fill_value=1))
生产
0 1 2 3
Equipment_Class
PC1 6.104 2.196 0.017 0.000
PC1 5.232 2.196 0.017 0.000
PC1 5.232 2.196 0.017 0.000
PC2 7.672 5.055 0.872 0.000
PC2 3.836 5.055 0.872 0.070
PC2 5.754 5.055 0.872 0.035
推荐阅读
- reactjs - 错误:找不到模块:错误:无法解析 'D:\opensource\sound-redux\node_modules\soundcloud' 中的 './src/api'
- javascript - 带数组的 JSON
- sql - 基于列组织表中的数据
- unity3d - Unity、Vr、Vive - 播放/暂停视频的控制器?
- lotus-notes - 注释 EMBEDDEDOBJECT (1090) 不返回内联图像
- c# - 如何在没有 Windows 窗体参考的情况下获得屏幕分辨率?
- java - 按分隔符数量拆分字符串
- sql - 将一列中的记录作为table1中的不同行从sql-server中table2的一行中的不同列插入
- python - 列表索引超出范围错误必须有索引指示
- sql - SQL 选择列 BLOB 数据的特定(第 4)部分,由特定模式分隔