我有一个像这样的DataFrame:
ind col1 col2
1 12 string1 ...
2 23 string2 ...
3 34 string1 ...
4 13 string2 ...
5 17 string3 ...
... ... ... ...
我想折叠DataFrame,以便col2是唯一的。在col1(和所有其他数字列)中,我想把所有值的中位数放在col2相等的位置。
我知道我可以提取df [df [“col2”] ==“stringN”],计算中位数并构建一个新的DataFrame,但是有更优雅/ pythonic的方法吗?
答案 0 :(得分:4)
您可以使用groupby按col2
然后.median()
收集行:
>>> df
ind col1 col2
0 1 12 string1
1 2 23 string2
2 3 34 string1
3 4 13 string2
4 5 17 string3
>>> df.groupby("col2")
<pandas.core.groupby.DataFrameGroupBy object at 0x9f41b8c>
>>> df.groupby("col2").median()
ind col1
col2
string1 2 23
string2 3 18
string3 5 17
>>> df.groupby("col2").median().reset_index()
col2 ind col1
0 string1 2 23
1 string2 3 18
2 string3 5 17
请注意,结果也包含ind
值的中位数。另请参阅.mean()
,.min()
,.max()
,或者如果您愿意,也可以自行推送。