![](/img/trans.png)
[英]Pandas: Assign multi-index DataFrame with with DataFrame by index-level-0
[英]Get index of the minimum of multi-index Pandas DataFrame using level
我有一個熊貓數據幀是multiindexed ,並希望找到在每個級別上的行的子集某列的最小值,並獲得這些行的全部內容。
import pandas as pd
idx = pd.MultiIndex.from_product([['v1', 'v2'],
['record' + str(i) for i in range(1, 7)]])
df = pd.DataFrame([[2., 114], [2., 1140],
[3., 114], [3., 1140],
[5., 114], [5., 1140],
[2., 114], [2., 1140],
[3., 114], [3., 1140],
[5., 114], [5., 1140]],
columns=['col1', 'col2'],
index=idx)
我的結構:
col1 col2
level1 level2
v1 record1 2.0 114
record2 2.0 1140
record3 3.0 114
record4 3.0 1140
record5 5.0 114
record6 5.0 1140
v2 record1 2.0 114
record2 2.0 1140
record3 3.0 114
record4 3.0 1140
record5 5.0 114
record6 5.0 1140
示例所需的輸出我想要col1 == 5
的另一列的最小值:
col1 col2
level1 level2
v1 record5 5.0 114
v2 record5 5.0 114
我知道我可以使用比較語句獲取行的子集。
df.ix[df['col1'] == 5]
而且我也知道,我可以從各級該子集內獲取某列的最小值 。
df['col2'][df['col1'] == 5].min(level='level1')
如果我想指定級別,那么我可以在特定級別上獲得1行的索引 。
df.ix['v1', pay_up_file.ix['v1']['col2'][(df.ix['v1']['col1'] == 5)].idxmin()]
但我無法弄清楚是否有一種有效的方法從各個層面獲取索引
似乎沒有一種方法可用於此:
df['col2'][df['col1'] == 5].idxmin(level='level1')
我可以用這個得到我想要的東西:
df.ix[
(df['col1'] == 5) &
(df['col2'].isin(df['col2'][df['col1'] == 5].min(level='level1').values))
]
但是對於Pandas
其他一切,是否有更好的方法來獲得我的輸出?
這應該工作:
df.loc[df.loc[df.col1 == 5.].groupby(level=0).col2.idxmin()]
col1 col2
v1 record5 5.0 114
v2 record5 5.0 114
我正在使用你認為應該的idxmin
。 但背景很重要。 我在groupby(level=0).col2.idxmin()
它,它的行為與你認為的col2.idxmin(level=...)
。
>>> (df[df.col1 == 5]
.groupby(level=0, as_index=False).col2
.apply(lambda group: group.nsmallest(1))
0 v1 record5 114
1 v2 record5 114
dtype: int64
要么...
>>> df[df.col1 == 5].groupby(level=0).col2.nsmallest(1)
v1 v1 record5 114
v2 v2 record5 114
dtype: int64
但我不確定為什么第一級顯示兩次(即'v1''v1'......)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.