我有以下 Pandas DataFrame,我正在嘗試根據它們的類對動物進行分組。我知道我可以使用 groupby 來獲得更快的結果。但是,我在想是否有辦法通過遍歷行來復制 groupby 函式。
df = pd.DataFrame([('bird', 'Falconiformes', 389.0),
('bird', 'Psittaciformes', 24.0),
('mammal', 'Carnivora', 80.2),
('mammal', 'Primates', np.nan),
('mammal', 'Carnivora', 58)],
index=['falcon', 'parrot', 'lion', 'monkey', 'leopard'],
columns=('class', 'order', 'max_speed'))
我一直在嘗試使用以下代碼但它不起作用,而且我找不到其他方法。
birds = []
mammal = []
for i, columnclass in df.iterrows():
if i == 'bird':
birds.append(i)
else:
mammal.append(i)
print(birds)
print(mammal)
輸出應該類似于此代碼。
group = df.groupby(['class']).sum()
出[1]:
class max_speed
bird 413.0
mammal 138.2
uj5u.com熱心網友回復:
您真的不需要任何回圈。首先獲取唯一元素的串列:
classes = df['class'].unique()
現在你可以制作一本字典或任何你想要的東西:
data = {cls: df['class'] == cls for cls in classes}
或單線:
data = {cls: df['class'] == cls for cls in df['class'].unique()}
但是為什么要在可以使用的情況下做這樣的事情groupby呢?
uj5u.com熱心網友回復:
這是一個解決方案,盡管實際上 _deprecated 支持df.set_index('class').groupby(level=0).sum():
group = df.set_index('class')['max_speed'].sum(level=0)
輸出:
>>> group
class
bird 413.0
mammal 138.2
Name: max_speed, dtype: float64
uj5u.com熱心網友回復:
iterrows資料框的方法回傳一個包含(索引,由列名索引的行資料的系列)的 2 元組。這是熊貓檔案中的參考:
DataFrame.iterrows()
作為 (index, Series) 對遍歷 DataFrame 行。
您需要訪問class每一行的列。您可以通過在 for 回圈中直接解包來做到這一點:
birds = []
mammal = []
for i, (columnclass, _, _) in df.iterrows():
if columnclass == "bird":
birds.append(i)
else:
mammal.append(i)
print(birds)
print(mammal)
uj5u.com熱心網友回復:
您可以columnclass['class']在回圈中獲取類名參考:
birds = []
mammal = []
for i, columnclass in df.iterrows():
if columnclass['class'] == 'bird':
birds.append(i)
else:
mammal.append(i)
print(birds)
print(mammal)
輸出:
['falcon', 'parrot']
['lion', 'monkey', 'leopard']
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392636.html
