我有兩個熊貓資料框。
資料框一具有三列:
| 姓名 | 開始時間 | 時間結束 |
|---|---|---|
| 愛麗絲 | 04:00 | 05:00 |
| 鮑勃 | 05:00 | 07:00 |
資料框二有三列:
| 時間 | 積分_1 | 積分_2 |
|---|---|---|
| 04:30 | 5 | 4 |
| 04:45 | 8 | 6 |
| 05:30 | 10 | 3 |
| 06:15 | 4 | 7 |
| 06:55 | 1 | 0 |
我想合并這兩個資料框,使第一個資料框現在有 5 列:
| 姓名 | 開始時間 | 時間結束 | average_point_1 | average_point_2 |
|---|---|---|---|---|
| 愛麗絲 | 04:00 | 05:00 | 6.5 | 5 |
| 鮑勃 | 05:00 | 07:00 | 5 | 3.33 |
其中 average_point_1 列由每行的開始時間和結束時間之間資料幀二中的 points_1 的平均值組成。同樣average_point_2。有人可以告訴我如何像這樣合并兩個資料框,而不必開發一個平均函式來首先制作列然后合并。
uj5u.com熱心網友回復:
嘗試:
#convert all time fields to datetime for merge_asof compatibility
df1["start_time"] = pd.to_datetime(df1["start_time"],format="%H:%M")
df1["end_time"] = pd.to_datetime(df1["end_time"],format="%H:%M")
df2["time"] = pd.to_datetime(df2["time"],format="%H:%M")
#merge both dataframes on time
merged = pd.merge_asof(df2, df1, left_on="time", right_on="start_time")
#groupy and get average for each name
output = merged.groupby(["name", "start_time", "end_time"],as_index=False).mean()
#convert time columns back to strings if needed
output["start_time"] = output["start_time"].dt.strftime("%H:%M")
output["end_time"] = output["end_time"].dt.strftime("%H:%M")
>>> output
name start_time end_time points_1 points_2
0 alice 04:00 05:00 6.5 5.000000
1 bob 05:00 07:00 5.0 3.333333
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456646.html
標籤:Python 熊猫 数据框 熊猫-groupby
上一篇:將df列轉換為jsondf列
