[英]Is there a way to dynamically generate dataframes from another dataframe of indefinite row length?
我是 Python 的業余愛好者/初學者,但對此有點困惑。 我擁有的是一個數據框,它是對實時數據進行 API 查詢的結果。 復雜的部分是這個數據框可能只產生幾列數據或許多列,而且它不是可以預測或硬編碼的東西。 為缺少代碼而道歉:我必須提取和重塑數據的代碼都運行良好,但我在這里被難住了。
我有一個 df (稱為data_wide
),看起來像這樣:
Date A1 B1 C1
0 2019-12-02 109.20 123.45 111.21
1 2019-12-03 108.37 133.45 121.56
2 2019-12-05 109.32 154.11 131.34
3 2019-12-06 110.41 187.24 138.55
4 2019-12-09 110.79 201.32 132.42
我想我需要弄清楚如何動態連接列。 我需要日期,每個單獨的列都變成這樣的數據框,最好以標題字符串命名。
Date A1
0 2019-12-02 109.20
1 2019-12-03 108.37
2 2019-12-05 109.32
3 2019-12-06 110.41
4 2019-12-09 110.79
和
Date B1
0 2019-12-02 123.45
1 2019-12-03 133.45
2 2019-12-05 154.11
3 2019-12-06 187.24
4 2019-12-09 201.32
和
Date C1
0 2019-12-02 111.21
1 2019-12-03 121.56
2 2019-12-05 131.34
3 2019-12-06 138.55
4 2019-12-09 132.42
但問題是
初始數據框的列數不確定,因為我是通過 API 提取數據來生成它的,並且根據查詢可能有 5 列或 30 列。以前有人遇到過這樣的用例嗎? 我可以手動拉出第一組:
對於我進行的每個 API 查詢,列名都將不同,因此不能將它們硬編碼為文本值。
test = data_wide.iloc[:, [0, 1]]
但我需要為日期列和 API 請求生成的每一列生成一個數據框。 我覺得我應該能夠在 for 語句的每個循環中增加第二個iloc 值,但這似乎不可能。
感謝任何對此有建議或見解的人!
你可以試試:
dfs = dict()
for col in data_wide.columns[1:]:
dfs[col] = data_wide[['Date', col]]
然后,例如, dfs['C1']
返回:
Date C1
0 2019-12-02 111.21
1 2019-12-03 121.56
2 2019-12-05 131.34
3 2019-12-06 138.55
4 2019-12-09 132.42
oneliner 中的相同解決方案:
dfs = {k:v for (k,v) in [[col, data_wide[['Date', col]]] for col in data_wide.columns[1:]]}
或者創建數據框列表
dfs = [data_wide[['Date', col]] for col in data_wide.columns[1:]]
然后,例如, dfs[1]
返回:
Date B1
0 2019-12-02 123.45
1 2019-12-03 133.45
2 2019-12-05 154.11
3 2019-12-06 187.24
4 2019-12-09 201.32
試試這個:
frames = []
for col in datawide.drop("Date", axis=1).columns:
frames.append(datawide[["Date", col]])
# 'frames' is a list with all resulting dataframes
print(frames[0)]
# prints out to:
Date A1
0 2019-12-02 109.20
1 2019-12-03 108.37
2 2019-12-05 109.32
3 2019-12-06 110.41
4 2019-12-09 110.79
無論Date
列在數據框中的哪個位置,這都有效。
您可以通過單個字典理解生成它:
date_col = "Date"
dfs = {
col: df.loc[:, [date_col, col]]
for col in df.columns
if col != date_col
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.