我有一個由時間戳索引的布爾資料框
df
>>>
timestamp x0 x1 x2
2020-01-01 True False True
2020-01-02 True False True
2020-01-03 False True True
我想為該列所在的每一行保存一個列名的 csv,True并將當前時間戳作為 csv 檔案名。因此,在上面的示例中,所需的輸出將是 3 個 csv:
20200101.csv:
x0,
x2,
20200102.csv:
x0,
x2,
20200103.csv:
x1,
x2,
我已經設法使用 for 回圈和一些 pandas 方法來做到這一點,但它看起來很笨重。(這幾乎是 R 中的單行代碼,就像使用splitand一樣lapply。)
import numpy as np
for idx, row in df.iterrows():
tmp = row.replace({False: np.nan}).dropna()
tmp = pd.DataFrame({"my_col": tmp.index.tolist()})
file_name = ''.join(str(idx.date()).split('-'))
tmp.to_csv(f"{file_name}.csv", index=False)
有沒有一種干凈的方法可以使用純 pandas / map reduce / pandas apply 并避免 for 回圈?
uj5u.com熱心網友回復:
必須堅持回圈來寫出 CSV。
df_out = df.melt(id_vars='timestamp').loc[lambda x: x['value']].sort_values('timestamp')
print(df_out)
timestamp variable value
0 2020-01-01 x0 True
6 2020-01-01 x2 True
1 2020-01-02 x0 True
7 2020-01-02 x2 True
5 2020-01-03 x1 True
8 2020-01-03 x2 True
訴諸于備受詬病的回圈以輸出到 CSV:
for t, frame in df_out.groupby('timestamp').variable:
frame.to_csv(re.sub('-','',fr'd:\jchtempnew\SO\{t}.csv'),
index=None, header=None, line_terminator=',\r\n')
20200101.csv:
x0,
x2,
20200102.csv:
x0,
x2,
20200103.csv:
x1,
x2,
請注意,line_terminator=',\r\n'其中包含在to_csv每行末尾放置一個逗號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/489918.html
