Python Pandas : 如何对 DataFrame 索引使用转换?
Python Pandas : How to use transform with the DataFrame index?
df = pd.DataFrame([['A',7], ['A',5], ['B',6]], columns = ['group', 'value'])
如果我想保留一行 group
,最小行 value
,我使用 :
df[df['value'] == df.groupby('group')['value'].transform('min')]
但是,如果我想保留索引最低的行,则以下方法不起作用:
df[df.index == df.groupby('group').index.transform('min')]
我知道我可以使用 reset_index() 并将索引作为列处理,但我可以避免这种情况吗:
df[df.reset_index()['index'] == df.reset_index().groupby('group')['index'].transform('min')]
你可以这样做:
import pandas as pd
df = pd.DataFrame([['A', 7], ['A', 5], ['B', 6]], columns=['group', 'value'])
idxs = df.reset_index().groupby('group').index.idxmin()
result = df.loc[idxs]
print(result)
输出
group value
0 A 7
2 B 6
您可以按索引排序(如果尚未排序),然后取每组中的第一行:
df.sort_index().groupby('group').first()
df = pd.DataFrame([['A',7], ['A',5], ['B',6]], columns = ['group', 'value'])
如果我想保留一行 group
,最小行 value
,我使用 :
df[df['value'] == df.groupby('group')['value'].transform('min')]
但是,如果我想保留索引最低的行,则以下方法不起作用:
df[df.index == df.groupby('group').index.transform('min')]
我知道我可以使用 reset_index() 并将索引作为列处理,但我可以避免这种情况吗:
df[df.reset_index()['index'] == df.reset_index().groupby('group')['index'].transform('min')]
你可以这样做:
import pandas as pd
df = pd.DataFrame([['A', 7], ['A', 5], ['B', 6]], columns=['group', 'value'])
idxs = df.reset_index().groupby('group').index.idxmin()
result = df.loc[idxs]
print(result)
输出
group value
0 A 7
2 B 6
您可以按索引排序(如果尚未排序),然后取每组中的第一行:
df.sort_index().groupby('group').first()