pandas 基于行创建列

mtb9vblg  于 2022-11-20  发布在  其他
关注(0)|答案(3)|浏览(130)

我是Pandas的新手,我正在寻找一种很好的方法来转换这个 Dataframe :
| 日期|名称名称名称|数值|
| - -|- -|- -|
| 2022年1月1日|A级|第0页|
| 2022年1月1日|B|一个|
| 2022年1月1日|C语言|一个|
| 2022年1月2日|A级|一个|
| 2022年1月2日|B|一个|
| 2022年1月2日|C语言|第0页|
到此 Dataframe :
| 名称名称名称|之前的值(_B)|之后的值(_A)|
| - -|- -|- -|
| A级|第0页|一个|
| B|一个|一个|
| C语言|一个|第0页|
第一个表只包含两个日期的数据。

e5njpo68

e5njpo681#

假设:

  • 你只有两次约会
  • 每个日期没有重复的名称

您可以使用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
wqnecbli

wqnecbli2#

您正在查找的是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"))
yqkkidmi

yqkkidmi3#

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

相关问题