PANDA在Group中创建序数递增值列

时间:2016-04-28 23:14:52

标签: python pandas

我的数据框'df'包含:

col1 = datetime[64]
col2 = object
col3 = object
col4 = object

我想用'col1'对数据帧进行排序。然后我想按'col2'分组。最后,我想在'col2'的分组中创建一个序数值(1,2,3),并按'col1'排序。如果按'col2'分组中有4行,则在这个新列中这些行的值将为[1,2,3,4]。

我知道PANDAs中有'rank()',我可以使用

df['newcol'] = df.groupby(['col2'])['col1'].rank()

但是这不会给我原始数据帧列的序数值只有[1,2,3]在分组中?

3 个答案:

答案 0 :(得分:2)

你想要实现这样的目标吗?没有样本数据和期望的结果很难说清楚。

{"Key1":"value one","Key2":"value two","RowData":{"15/04":1.3,"15/05":1.2,"17/08":0.8}}

答案 1 :(得分:0)

试试这个:

>> df.sort_values(by='col1').groupby('col2')

这将首先按col1对您的DF进行排序,然后按col2进行分组。结果将是GroupBy对象。

如果您还想拥有每个组中的行数,那么您可以试试这个:

>> grouped = df.sort_values(by='col1').groupby('col2')
>> grouped.count()

我希望这有帮助!

答案 2 :(得分:0)

有一种熊猫groupby方法可以完全满足OP的要求:

df.sort_values("col1", inplace = True)
df["rank"] = df.groupby("col2").cumcount() + 1

不过,在此处使用MultiIndex可能会更有用:

df.set_index(["col1", "col2"], inplace = True)
df["rank"] = df.groupby(level = "col2").cumcount() + 1

使事物更漂亮(行以“ col2”和“ col1”排序):

df.sort_values(by=["col2", "col1"], inplace = True)