我有一个 Dataframe ,看起来像这样
data = [['Location 1', 'Oranges', 9, 12, 5, 10, 7, 12], ['Location 1', 'Apples', 2, 6, 4, 3, 7, 2], ['Location 1', 'Total', 11, 18, 9, 13, 14, 14],
['Location 2', 'Oranges', 11, 8, 14, 8, 10, 9], ['Location 2', 'Apples', 5, 4, 6, 2, 9, 9], ['Location 2', 'Total', 16, 12, 20, 10, 19, 18]]
df = pd.DataFrame(data, columns=['Location', 'Fruit', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
)
Location Fruit Jan Feb Mar Apr May Jun
0 Location 1 Oranges 9 12 5 10 7 12
1 Location 1 Apples 2 6 4 3 7 2
2 Location 1 Total 11 18 9 13 14 14
3 Location 2 Oranges 11 8 14 8 10 9
4 Location 2 Apples 5 4 6 2 9 9
5 Location 2 Total 16 12 20 10 19 18
我希望按位置分组,获取苹果百分比(苹果/总数),并将 Dataframe 转置为最终如下所示
Jan Feb Mar
Location # of Apples % Fruit # of Apples % Fruit # of Apples % Fruit
Location 1 2 18.2% 6 33.3% 4 44.4%
Location 2 5 31.3% 4 33.3% 6 20.0%
我尝试过使用此方法,但似乎有些乏味,因为我的完整数据集包含两个以上的位置
df.iloc[3, 2:4] = df.iloc[1, 2:4] / df.iloc[2, 2:4]
谢谢大家!
3条答案
按热度按时间xqk2d5yq1#
溶液
结果
798qvoo82#
要达到预期的结果,可以使用
pivot
方法来重新调整 Dataframe ,然后将“Apples”行的值除以“Total”行的值。下面是使用您提供的数据进行输入和输出的示例:
输入:
输出:
svdrlsy43#
我现在才看到@Shubham的答案,和我想出来的答案很像,我还是会贴这个答案,因为它略有不同:通过将索引设置为
['Fruit', 'Location']
,可以避免使用xs()
,而使用简单的.loc[]
,但实际上这是吹毛求疵,两者非常相似。