如何在條件下將行轉換為維度?
第 0 行和第 3 行是類別總計
當前格式
import pandas as pd
data = [['FRUIT', 'FRU', 100],['A.GRAPE','A.GRA', 50],['A.APPLE','A.APP', 50],
['VEGETABLE', 'VEG', 75],['A.TOMATO','A.TOM', 25],['A.CABBAGE','A.CAB', 25],['A.CARROT','A.CAR', 25]]
df = pd.DataFrame(data, columns = ['name', 'abbrevation', 'value'])
df.head(10)

所需格式
data2 = [['FRUIT','FRU','A.GRAPE','A.GRA', 50],['FRUIT','FRU','A.APPLE','A.APP', 50],
['VEGETABLE','VEG','A.TOMATO','A.TOM', 25],['VEGETABLE','VEG','A.CABBAGE','A.CAB', 25],['VEGETABLE','VEG','A.CARROT','A.CAR', 25]]
df2 = pd.DataFrame(data2, columns = ['category','category abbrevation','name', 'abbrevation', 'value'])
df2.head(10)

*類別下的行號可能不同
我檢查了論壇,似乎沒有什么接近的
嘗試參考這個@https://stackoverflow.com/questions/62626290/how-to-merge-every-3-rows-of-a-dataframe-into-1-row-with-3-columns
但那是不同的,我可以知道如何實作所需的格式嗎?
謝謝
uj5u.com熱心網友回復:
IIUC 構建類別的唯一提示是值:類別中每個元素的總和等于類別值。
然后,您必須跟蹤累積值以設定新的類別列:
cat_index = 0
for index, row in df.iterrows():
if index == cat_index:
cat_value = row["value"]
cumul_value = 0
else:
cumul_value = row["value"]
df.at[index, "category"] = df.at[cat_index, "name"]
df.at[index, "category abbreviation"] = df.at[cat_index, "abbreviation"]
if cumul_value == cat_value:
cat_index = index 1
# deleting category rows:
df = df.drop(df[df["name"]==df["category"]].index).reset_index(drop=True)
print(df)
輸出:
name abbreviation value category category abbreviation
0 A.GRAPE A.GRA 50 FRUIT FRU
1 A.APPLE A.APP 50 FRUIT FRU
2 A.TOMATO A.TOM 25 VEGETABLE VEG
3 A.CABBAGE A.CAB 25 VEGETABLE VEG
4 A.CARROT A.CAR 25 VEGETABLE VEG
uj5u.com熱心網友回復:
通過對類別僅應用 alpha 來查找類別。使用前向填充 - ffil 將類別中的 None 值替換為 Non-None 值
data = [['FRUIT', 'FRU', 100],['A.GRAPE','A.GRA', 50],['A.APPLE','A.APP', 50],
['VEGETABLE', 'VEG', 75],['A.TOMATO','A.TOM', 25],['A.CABBAGE','A.CAB', 25],['A.CARROT','A.CAR', 25]]
df = pd.DataFrame(data, columns = ['name', 'abbrevation', 'value'])
df['Category']=df['name'].apply(lambda x: x if x.isalpha() else None)
df.ffill(inplace=True)
print(df)
輸出
name abbrevation value Category
0 FRUIT FRU 100 FRUIT
1 A.GRAPE A.GRA 50 FRUIT
2 A.APPLE A.APP 50 FRUIT
3 VEGETABLE VEG 75 VEGETABLE
4 A.TOMATO A.TOM 25 VEGETABLE
5 A.CABBAGE A.CAB 25 VEGETABLE
6 A.CARROT A.CAR 25 VEGETABLE
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353669.html
上一篇:在熊貓資料框中每月計算和累計
