python - 使用熊猫将列作为日期从长到宽
问题描述
我有多个日期的 ID。我想为将标记该 ID 的所有日期创建一个列。我用枢轴试过这个它不起作用。它说它不能使用日期作为列。
data = {'id': [1, 1, 1, 2, 2,], 'dt': ['2021-01-01', '2021-01-02','2021-01-02', '2021-01-02', '2021-01-03']}
df = pd.DataFrame(data)
我采取的另一种方法是创建等级。然后拆开它。但它有很多问题,因为我没有得到排序的日期。
df['rank'] = df.sort_values('dt').groupby('id').cumcount+1
df.set_index(['id', 'dt'], append = True).unstack()
接下来我可以尝试什么?还是有更简单的方法?
解决方案
如果我理解正确:
尝试:
df['dt']=pd.to_datetime(df['dt'])
df['rank']=df.sort_values('dt').groupby('id').cumcount()+1
df['dt']=df['dt'].astype(str)
df=df.pivot('id','dt','rank').rename_axis(columns=None).reset_index()
输出df
:
id 2021-01-01 2021-01-02 2021-01-03
0 1 1.0 2.0 NaN
1 2 NaN 1.0 2.0
或(由于您没有提供预期的输出,所以不确定您想要哪一个)
通过crosstab()
:
df=pd.crosstab(df['id'],df['dt']).rename_axis(columns=None).reset_index()
输出df
:
id 2021-01-01 2021-01-02 2021-01-03
0 1 1 1 0
1 2 0 1 1
推荐阅读
- selenium - 无法在 Visual Studio 中使用 C# Nunit 在 Selenium 中找到元素。甚至 Selenium webdriver Java 的路径也能正常工作
- django - 在 Django 视图中,如何正确地将返回的 HTML 表呈现给模板?
- r - 如何将包含列内列表的数据框转换为R中的多列?
- php - 在 php 的 the_modified_time 函数的小时和分钟之间添加后缀 h
- java - 为什么我的存储过程与 MySQL 控制台不同?
- java - 如何检查我们现在是否在 2 个日期时间对象之间?
- c++ - 打开 std::ifstream 实例是否有最大限制?> 254 个实例的问题
- acumatica - 自定义网格为空
- python - numpy.rand.seed() 的数据类型
- flutter - 如何在云端构建 Flutter APK 并获取可下载链接?