【发布时间】:2022-11-17 13:53:03
【问题描述】:
我是熊猫的新手,我正在寻找一种转换此数据框的好方法:
| Date | Name | Value |
|---|---|---|
| 01-01-2022 | A | 0 |
| 01-01-2022 | B | 1 |
| 01-01-2022 | C | 1 |
| 02-01-2022 | A | 1 |
| 02-01-2022 | B | 1 |
| 02-01-2022 | C | 0 |
对于这个数据框:
| Name | Value_before | Value_after |
|---|---|---|
| A | 0 | 1 |
| B | 1 | 1 |
| C | 1 | 0 |
第一个表仅包含两个日期的数据。
【问题讨论】:
我是熊猫的新手,我正在寻找一种转换此数据框的好方法:
| Date | Name | Value |
|---|---|---|
| 01-01-2022 | A | 0 |
| 01-01-2022 | B | 1 |
| 01-01-2022 | C | 1 |
| 02-01-2022 | A | 1 |
| 02-01-2022 | B | 1 |
| 02-01-2022 | C | 0 |
对于这个数据框:
| Name | Value_before | Value_after |
|---|---|---|
| A | 0 | 1 |
| B | 1 | 1 |
| C | 1 | 0 |
第一个表仅包含两个日期的数据。
【问题讨论】:
假设:
您可以使用 pivot 利用 pivot 对列进行排序,然后使用 set_axis 使用您的自定义名称
out = (df
.assign(Date=pd.to_datetime(df['Date'])) # ensure datetime for correct sorting
.pivot('Name', 'Date', 'Value')
.set_axis(['Value_before', 'Value_after'], axis=1)
.reset_index()
)
输出:
Name Value_before Value_after
0 A 0 1
1 B 1 1
2 C 1 0
【讨论】:
你要找的是pivot tables
import pandas as pd
from datetime import date
df = pd.DataFrame({
"Date": [date(2022,1,1), date(2022,1,1), date(2022,1,1), date(2022,1,2), date(2022,1,2), date(2022,1,2)],
"Name": ["A", "B", "C", "A", "B", "C"],
"Value": [0, 1, 1, 1, 1, 0]
})
print(pd.pivot_table(df, values="Value", index="Name", columns="Date"))
【讨论】:
def function1(dd:pd.DataFrame):
dd1=dd.loc[:,'Value']
dd1.index=['Value_before','Value_after']
return dd1
df1.groupby("Name").apply(function1)
Value Value_before Value_after
Name
A 0 1
B 1 1
C 1 0
【讨论】: