Python 旋转包含字符串的数据帧-第一次只添加一列,然后在任何列中添加值
大家早上好 我有许多以下格式的文件,但在测量列中有不同的值Python 旋转包含字符串的数据帧-第一次只添加一列,然后在任何列中添加值,python,python-3.x,pandas,python-2.7,Python,Python 3.x,Pandas,Python 2.7,大家早上好 我有许多以下格式的文件,但在测量列中有不同的值 subject_id hour measure value 2 1 heart rate 40 4 3 SPO2 high 我想使用pivot表重塑数据,以便使用以下代码 df1 = df.pivot_table(index=["subject_id" ,"hour"], columns='measur
subject_id hour measure value
2 1 heart rate 40
4 3 SPO2 high
我想使用pivot表重塑数据,以便使用以下代码
df1 = df.pivot_table(index=["subject_id" ,"hour"], columns='measure', values=['value'], aggfunc='first')
df1.columns = df1.columns.droplevel()
df1 = df1.reset_index()
df1.columns=df1.columns.tolist()
print (df1)
with open('patients.csv', 'a',newline='') as f:
df1.to_csv(f, header=True)
它运行良好,并给我以下文件
subject_id hour heart rate spo2
2 1 40
4 3 high
但是当我想将另一个文件连接到同一个文件patients.csv
假设新文件是
subject_id hour measure value
5 4 resp 50
6 4 urine 200
我使用上面提到的相同代码添加值和新列
df1 = df.pivot_table(index=["subject_id" ,"hour"], columns='measure', values=['value'], aggfunc='first')
df1.columns = df1.columns.droplevel()
df1 = df1.reset_index()
df1.columns=df1.columns.tolist()
print (df1)
with open('patients.csv', 'a',newline='') as f:
df1.to_csv(f, header=True)
因此,它没有将新度量值添加为新列,它只添加新患者,并将值添加到旧列,如下所示
subject_id hour heart rate spo2
2 1 40
4 3 high
5 4 50
6 4 200
subject_id hour heart rate spo2 resp urine
2 1 40
4 3 high
5 4 50
6 4 200
因此,输出文件不正确,我希望它如下所示
subject_id hour heart rate spo2
2 1 40
4 3 high
5 4 50
6 4 200
subject_id hour heart rate spo2 resp urine
2 1 40
4 3 high
5 4 50
6 4 200
我怎样才能解决这个问题
任何帮助都将不胜感激您需要在
python
中操作数据,而不是每次都将其添加到文件中。在“patients.csv”中获得第一个文件中的数据后,请使用以下方法读取:
original_data = pd.read_csv("patients.csv")
在创建df1
之后,如在代码中所做的那样,使用以下代码对其进行连接:
full_data = pd.concat([original_data, df1], sort=False)
然后,您可以使用以下方法保存它:
full_data.to_csv("patients.csv", index=False) # Always better option to work with csv files than "with open... as..."
如何将第二个文件转换为第一个文件?请在问题中添加代码,而不是作为注释。好的,完成,,你现在可以检查我想你只是错误地复制了前一个代码。。。(修复后我将删除此注释)这是相同的代码,但它与每个文件一起运行,以便在第一次使用时将结果连接到最终文件,我们只能使用save**pivot\u table.to\u csv('\\path)**