gpt4 book ai didi

python - 根据存在的 df 获取一个新的数据框,其中的值作为列

转载 作者:行者123 更新时间:2023-12-04 08:52:14 24 4
gpt4 key购买 nike

我有什么?
我有以下 df 和日期列表:

df
id value date
0 1 1 2020-01-01
1 1 2 2020-02-01
2 1 3 2020-03-01
3 2 3 2020-01-01
4 2 4 2020-02-01
5 2 5 2020-03-01
6 3 6 2020-01-01
7 3 7 2020-02-01
8 3 8 2020-03-01

dates = ['2020-01-01','2020-02-01','2020-03-01']
我想得到什么?
我想要一个具有不同 id 的新 df 并且每个日期都有一个具有值的新列:
   id  2020-01-01  2020-02-01  2020-03-01
0 1 1 2 3
1 2 4 5 6
2 3 7 8 9

我尝试过什么?
for date in dates:
df_result[date] = df.loc[df['date'] == date, 'value']
这就是我得到的:

id 2020-01-01 2020-02-01 2020-03-01
0 1 1.0 NaN NaN
1 2 NaN 2.0 NaN
2 3 NaN NaN 3.0

如您所见,这是错误的,有什么解决方案吗?

最佳答案

如果日期是字符串,请使用 Series.isin 带有过滤器列表 boolean indexing 然后 DataFrame.pivot :

dates = ['2020-01-01','2020-02-01','2020-03-01']

df = df[df['date'].isin(dates)].pivot('id','date','value')
print (df)
date 2020-01-01 2020-02-01 2020-03-01
id
1 1 2 3
2 3 4 5
3 6 7 8
最后转换 id列:
df = df.reset_index().rename_axis(None, axis=1)
print (df)
id 2020-01-01 2020-02-01 2020-03-01
0 1 1 2 3
1 2 3 4 5
2 3 6 7 8
带日期时间的解决方案 - 还需要转换列表:
df['date'] = pd.to_datetime(df['date'])

dates = ['2020-01-01','2020-02-01','2020-03-01']

df = df[df['date'].isin(pd.to_datetime(dates))].pivot('id','date','value')
print (df)
date 2020-01-01 2020-02-01 2020-03-01
id
1 1 2 3
2 3 4 5
3 6 7 8
最后转换 id到列,添加了隐藏时间:
df = df.reset_index().rename_axis(None, axis=1)
print (df)
id 2020-01-01 00:00:00 2020-02-01 00:00:00 2020-03-01 00:00:00
0 1 1 2 3
1 2 3 4 5
2 3 6 7 8
为了删除它们,可以将日期时间转换为字符串:
df = (df.rename(columns = lambda x: x.strftime('%Y-%m-%d'))
.reset_index()
.rename_axis(None, axis=1))
print (df)
id 2020-01-01 2020-02-01 2020-03-01
0 1 1 2 3
1 2 3 4 5
2 3 6 7 8

关于python - 根据存在的 df 获取一个新的数据框,其中的值作为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64042623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com