我有这样一个 Dataframe :
| 出席|电子邮件|加入日期|加入时间|加入时间|
| - ------| - ------| - ------| - ------| - ------|
| | | | 加入时间第一|最后加入时间|
| 是的|009英德拉Git|2022年12月3日|2022年12月3日19时50分|2022年12月3日21时47分|
| Yes | 09871143420.ms | 12/18/2022 | 12/18/2022 20:41 | 12/18/2022 20:41 |
| 是的|09s.bisht|二○二二年十二月十七日|2022年12月17日19:51| 2022年12月17日19:51|
我需要像这样修改列标题:
| 出席|电子邮件|加入日期|加入时间第一|最后加入时间|
| - ------| - ------| - ------| - ------| - ------|
| 是的|009英德拉Git|2022年12月3日|2022年12月3日19时50分|2022年12月3日21时47分|
| Yes | 09871143420.ms | 12/18/2022 | 12/18/2022 20:41 | 12/18/2022 20:41 |
| 是的|09s.bisht|二○二二年十二月十七日|2022年12月17日19:51| 2022年12月17日19:51|
我尝试了多种方法,但都没有成功,任何帮助都将不胜感激。为了到达第一个 Dataframe ,这是我所做的:
import pandas as pd
df = pd.DataFrame({"Attended":["Yes","Yes","Yes"]
,"Email":["009indrajeet","09871143420.ms","09s.bisht"]
,"JoinTime":["Dec 3, 2022 19:50:52","Dec 3, 2022 20:10:52","Dec 3, 2022 21:47:32"]})
#convert JoinTime to timestamp column
df['JoinTime'] = pd.to_datetime(df['JoinTime'],format='%b %d, %Y %H:%M:%S', errors='raise')
#extract date from timestamp column
df['JoinDate'] = df['JoinTime'].dt.date
#created grouper dataset
df_grp = df.groupby(["Attended","Email","JoinDate"])
#define aggregations
dict_agg = {'JoinTime':[('JoinTimeFirst','min'),('JoinTimeLast','max'),('JoinTimes',set)]}
#do grouping with aggregations
df = df_grp.agg(dict_agg).reset_index()
打印(df)
print(df.columns)
MultiIndex([('Attended', ''),
( 'Email', ''),
('JoinDate', ''),
('JoinTime', 'JoinTimeFirst'),
('JoinTime', 'JoinTimeLast'),
('JoinTime', 'JoinTimes')],
)
4条答案
按热度按时间qni6mghb1#
使用命名聚合-传递格式已更改的字典-键是新列名,值是元组-第一个值是处理列,第二个值是聚合函数:
您还可以传递命名聚合:
k2arahey2#
h22fl7wq3#
下面的方法更为通用,基本上是针对第一行具有列名的情况设计的
cpjpxq1n4#
您可以像这样使用rename:
完整的代码,可用于重命名“JoinTime”列、重新排列列的顺序以及将修改后的DataFrame保存到新的CSV文件: