我有以下熊猫DataFrame
, df.head()
:
userid followers experience fixed_date
0 12134 28266 Intermediate 2012-10-15
1 12134 28266 Intermediate 2012-10-15
2 91638 665 Missing 2012-10-15
3 148401 123 Professional 2012-10-15
4 5890 2436 Professional 2012-10-15
我想创建一个新的DataFrame
,其中行是userid
,列是fixed_date
,值是(followers,experience)
的元组。正如您所看到的,我有重复的userid
行,这是我在尝试df.pivot()
时得到的错误。但是followers
的数量可以在以后的日期更改,所以我想捕获每个userid
的数量。
我可以提供更多关于数据的背景信息。这些行是当前的tweet,因此用户可以(而且经常)在给定的一天内发布多个tweet。因此,也会有重复的fixed_date
,因为我忽略了tweet的确切时间(HH:MM:SS)。对于用户在给定日期内多次发布tweet的情况,最好将其分组到单元格值中,并创建一个元组数组。如果这已经要求太多了,那么仅仅拥有相同值的多个列就绰绰有余了。如果不可能,我还可以将日期保存到一个单独的数组中,并枚举列0..n
。只是随便说说而已。
任何想法?
这不是很优雅,但可以工作:
df2 = pd.DataFrame(df.loc[:, ['followers', 'fixed_date']]) # New frame with just two cols
df2.index = df.userid # Set the index to user id
df2 = df2.drop_duplicates() # remove duplicate records
或者如果你只想把元组传递给一个数组,你可以这样做:
df.loc[:, ['userid', 'fixed_date', 'followers']].values
# array([[12134, '2012-10-15', 28266],
[12134, '2012-10-15', 28266],
[91638, '2012-10-15', 665],
[148401, '2012-10-15', 123],
[5890, '2012-10-15', 2436]], dtype=object)
您可以使用它作为稀疏矩阵传递或转换为numpy narray/矩阵。