如何更改数据集(如 Excel 中的数据透视表)
How change dataset (like pivottable in excell)
我将一个 csv 文件导入到 pandas 数据集(phyton)
ParamID
EquipmentID
SetValue
0
1
Line1
217.0
1
2
Line1
3.0
2
4
Line1
0.0
3
6
Line1
17.0
4
2
Line2
3.0
5
4
Line2
0.0
6
6
Line2
17.0
我想将其更改为另一个 table,我可以在其中看到 difference/Line
ParamID
LINE1
LINE2
Difference
0
1:---
217.0
/
217.0
1
2
3.0
3.0
0
2
4
0.0
0.0
0
3
6
17.0
17.0
0
我试过 pivot1=pd.pivot_table(new_df, index = 'Region')
但这给出了一个错误:“KeyError:'Region'”
关于给定解决方案的其他问题:
如果“Line1”和“Line2”其中第一个 table 中的数字(21 和 22)为什么 df1['Difference'] = (df1['21'].replace(np.nan,0) - df1['22'].replace(np.nan,0))
在 21
上给出一个 KeyError
df1 = df.pivot('ParamID','EquipmentID','SetValue')
df1['Difference'] = (df1['Line1'].replace(np.nan,0) - df1['Line2'].replace(np.nan,0))
df1
更新完整答案(修改 table):
df1 = df.pivot('ParamID','EquipmentID','SetValue').reset_index()
df1['Difference'] = (df1['Line1'].replace(np.nan,0) - df1['Line2'].replace(np.nan,0))
df1['ParamID'] = np.where((np.isnan(df1.Line1)) | (np.isnan(df1.Line2)), df1['ParamID'].astype(str) + ':---' , df1['ParamID'])
df1.replace(np.nan,0,inplace=True)
df1.columns.name=''
更新问题的答案
新数据:
第 1 步:
df1 = df.pivot('ParamID','EquipmentID','SetValue').reset_index()
第 2 步:
df1['Difference'] = (df1.iloc[:,1].replace(np.nan,0) - df1.iloc[:,2].replace(np.nan,0))
df1['ParamID'] = np.where((np.isnan(df1.iloc[:,1])) | (np.isnan(df1.iloc[:,2])), df1['ParamID'].astype(str) + ':---' , df1['ParamID'])
df1.replace(np.nan,0,inplace=True)
df1.columns.name=''
您可以按如下方式使用.pivot_table()
:
pivot1 = (df.pivot_table(index='ParamID',
columns='EquipmentID',
values='SetValue',
fill_value=0)
.reset_index()
.rename_axis(columns=None)
)
pivot1['Difference'] = pivot1['Line1'] - pivot1['Line2']
结果:
print(pivot1)
ParamID Line1 Line2 Difference
0 1 217 0 217
1 2 3 3 0
2 4 0 0 0
3 6 17 17 0
我将一个 csv 文件导入到 pandas 数据集(phyton)
ParamID | EquipmentID | SetValue | |
---|---|---|---|
0 | 1 | Line1 | 217.0 |
1 | 2 | Line1 | 3.0 |
2 | 4 | Line1 | 0.0 |
3 | 6 | Line1 | 17.0 |
4 | 2 | Line2 | 3.0 |
5 | 4 | Line2 | 0.0 |
6 | 6 | Line2 | 17.0 |
我想将其更改为另一个 table,我可以在其中看到 difference/Line
ParamID | LINE1 | LINE2 | Difference | |
---|---|---|---|---|
0 | 1:--- | 217.0 | / | 217.0 |
1 | 2 | 3.0 | 3.0 | 0 |
2 | 4 | 0.0 | 0.0 | 0 |
3 | 6 | 17.0 | 17.0 | 0 |
我试过 pivot1=pd.pivot_table(new_df, index = 'Region')
但这给出了一个错误:“KeyError:'Region'”
关于给定解决方案的其他问题:
如果“Line1”和“Line2”其中第一个 table 中的数字(21 和 22)为什么 df1['Difference'] = (df1['21'].replace(np.nan,0) - df1['22'].replace(np.nan,0))
在 21
df1 = df.pivot('ParamID','EquipmentID','SetValue')
df1['Difference'] = (df1['Line1'].replace(np.nan,0) - df1['Line2'].replace(np.nan,0))
df1
更新完整答案(修改 table):
df1 = df.pivot('ParamID','EquipmentID','SetValue').reset_index()
df1['Difference'] = (df1['Line1'].replace(np.nan,0) - df1['Line2'].replace(np.nan,0))
df1['ParamID'] = np.where((np.isnan(df1.Line1)) | (np.isnan(df1.Line2)), df1['ParamID'].astype(str) + ':---' , df1['ParamID'])
df1.replace(np.nan,0,inplace=True)
df1.columns.name=''
更新问题的答案
新数据:
第 1 步:
df1 = df.pivot('ParamID','EquipmentID','SetValue').reset_index()
第 2 步:
df1['Difference'] = (df1.iloc[:,1].replace(np.nan,0) - df1.iloc[:,2].replace(np.nan,0))
df1['ParamID'] = np.where((np.isnan(df1.iloc[:,1])) | (np.isnan(df1.iloc[:,2])), df1['ParamID'].astype(str) + ':---' , df1['ParamID'])
df1.replace(np.nan,0,inplace=True)
df1.columns.name=''
您可以按如下方式使用.pivot_table()
:
pivot1 = (df.pivot_table(index='ParamID',
columns='EquipmentID',
values='SetValue',
fill_value=0)
.reset_index()
.rename_axis(columns=None)
)
pivot1['Difference'] = pivot1['Line1'] - pivot1['Line2']
结果:
print(pivot1)
ParamID Line1 Line2 Difference
0 1 217 0 217
1 2 3 3 0
2 4 0 0 0
3 6 17 17 0