我的数据框'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]在分组中?
答案 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)