[英]Advanced Pivot Table in Pandas
我正在嘗試優化Python Pandas中的一些表轉換腳本,我正在嘗試使用龐大的數據集(超過5萬行)填充這些數據。 我編寫了一個腳本,該腳本遍歷每個索引並將值解析為一個新的數據幀(請參見下面的示例),但是我遇到了性能問題。 是否有任何pandas函數可以在不迭代的情況下獲得相同的結果?
示例代碼:
from datetime import datetime
import pandas as pd
date1 = datetime(2019,1,1)
date2 = datetime(2019,1,2)
df = pd.DataFrame({"ID": [1,1,2,2,3,3],
"date": [date1,date2,date1,date2,date1,date2],
"x": [1,2,3,4,5,6],
"y": ["a","a","b","b","c","c"]})
new_df = pd.DataFrame()
for i in df.index:
new_df.at[df.at[i, "ID"], "y"] = df.at[i, "y"]
if df.at[i, "date"] == datetime(2019,1,1):
new_df.at[df.at[i, "ID"], "x1"] = df.at[i, "x"]
elif df.at[i, "date"] == datetime(2019,1,2):
new_df.at[df.at[i, "ID"], "x2"] = df.at[i, "x"]
輸出:
ID date x y
0 1 2019-01-01 1 a
1 1 2019-01-02 2 a
2 2 2019-01-01 3 b
3 2 2019-01-02 4 b
4 3 2019-01-01 5 c
5 3 2019-01-02 6 c
y x1 x2
1 a 1.0 2.0
2 b 3.0 4.0
3 c 5.0 6.0
轉換基本上按“ ID”列對行進行分組,並從日期為2019-01-01的行中獲取“ x1”值,並從日期為2019-01-02的行中獲取“ x2”值。 在相同的“ ID”中,“ y”值相同。 “ ID”列成為新索引。
我很樂意就此事提出任何建議。
使用pivot_tables
將獲得您想要的東西:
result = df.pivot_table(index=['ID', 'y'], columns='date', values='x')
result.rename(columns={date1: 'x1', date2: 'x2'}).reset_index('y')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.