重塑pandas DataFrame并保存元组

时间:2015-10-06 15:06:44

标签: python pandas

我有以下pandas DataFramedf.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捕获该数据。

我可以提供更多关于数据的背景知识。这些行当前是推文,因此用户可以(并且经常)在给定的一天内发送超过一次的推文。因此,也会有重复fixed_date,因为我忽略了推文的确切时间(HH:MM:SS)。如果用户在给定日期内多次发推文,那么将其分组到单元格值并创建元组数组会很棒。如果这已经要求太多,那么只要拥有相同值的多个列就更好了。如果这不可能,我还可以将日期保存到单独的数组中并枚举列0..n。只是扔出想法。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

它不优雅,但这可行:

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 ndarray / matrix。