我有一个看起来像这样的DataFrame:
df index id timestamp cat value
0 8066 101 2012-03-01 09:00:29 A 1
1 8067 101 2012-03-01 09:01:15 B 0
2 8068 101 2012-03-01 09:40:18 C 1
3 8069 102 2012-03-01 09:40:18 C 0
我想要的是这样的:
df timestamp A B C id value
0 2012-03-01 09:00:29 1 0 0 101 1
1 2012-03-01 09:01:15 0 1 0 101 0
2 2012-03-01 09:40:18 0 0 1 101 1
3 2012-03-01 09:40:18 0 0 1 102 0
正如您在行2,3中看到的,时间戳可以是重复的。起初我尝试使用pivot(时间戳作为索引),但由于那些重复,这不起作用。我不想放弃它们,因为其他数据不同,不应该丢失。
由于 index 不包含重复内容,我想也许我可以转过头来,然后将结果合并到原始DataFrame中,但我想知道是否有更直观的解决方案。
谢谢!
答案 0 :(得分:1)
这是实现你想要的单线程。假设您的数据框名为df
df_new = df.join(pd.get_dummies(df.cat).drop(['index', 'cat'], axis=1)
答案 1 :(得分:1)
当你的get_dummies
返回一个df时,这将与你现有的df对齐,所以只有concat
列式:
In [66]:
pd.concat([df,pd.get_dummies(df['cat'])], axis=1)
Out[66]:
index id timestamp cat value A B C
0 8066 101 2012-03-01 09:00:29 A 1 1 0 0
1 8067 101 2012-03-01 09:01:15 B 0 0 1 0
2 8068 101 2012-03-01 09:40:18 C 1 0 0 1
3 8069 102 2012-03-01 09:40:18 C 0 0 0 1
你可以放弃“猫”。列df.drop('cat', axis=1)
答案 2 :(得分:0)
使用get_dummies。
见这里: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.reshape.get_dummies.html
StackOverflow示例: Create dummies from column with multiple values in pandas