[英]Python - How to change groups of values in one column of pandas dataframe depending on a value in another column?
我一直在堆棧上到處尋找這個問題和答案,但我似乎無法在任何地方找到它。
我有一個 pandas dataframe 看起來像下面的例子:
產品 | 購買 | 價格 |
---|---|---|
信用 ' | ||
玩具 | 現金 ' | 20 英鎊 |
電子產品 | 現金 ' | 50 英鎊 |
雜貨 | 現金 ' | 80 英鎊 |
賭博 | 現金 ' | 30 英鎊 |
現金 ' | ||
玩具 | 信用 ' | 20 英鎊 |
電子產品 | 信用 ' | 50 英鎊 |
雜貨 | 信用 ' | 80 英鎊 |
賭博 | 信用 ' | 30 英鎊 |
轉移 ' | ||
玩具 | 現金 ' | 20 英鎊 |
電子產品 | 現金 ' | 50 英鎊 |
雜貨 | 現金 ' | 80 英鎊 |
賭博 | 現金 ' | 30 英鎊 |
所以我試着在上面做一個 dataframe 來告訴你我的意思。 基本上在上面的 dataframe 中,我希望將第二列中的值替換為每組頂部的第一個對應值。
編輯:為了更容易理解,我為要更改的值添加了符號。 因此,在第一種情況下,信用是從產品列中獲取的,這將替換購買列中每個值的現金,直到它到達產品列中的現金,然后將下一個 4 項的購買列中的值從信用更改為現金,然后它會做同樣的轉移。
因此,對於第一組,價值是信用,但第一組項目的第二列是“現金”,我可以創建一個 function,它采用組頂部的第一個值並將僅該組的所有現金值分配給基於該組中的第一項的信用?
然后對於第一項是現金的第二組也是如此,我希望它接收第二組的第一項並將該組的所有信用值替換為第二組的第一項,在這種情況下將是現金。
等等?
抱歉,如果這不是很清楚,但如果有人可以幫助解決這個問題,我將非常感激。 :)
我想在 output 中看到什么::)
產品 | 購買 | 價格 |
---|---|---|
信用 | ||
玩具 | 信用 | 20 英鎊 |
電子產品 | 信用 | 50 英鎊 |
雜貨 | 信用 | 80 英鎊 |
賭博 | 信用 | 30 英鎊 |
現金 | ||
玩具 | 現金 | 20 英鎊 |
電子產品 | 現金 | 50 英鎊 |
雜貨 | 現金 | 80 英鎊 |
賭博 | 現金 | 30 英鎊 |
轉移 | ||
玩具 | 轉移 | 20 英鎊 |
電子產品 | 轉移 | 50 英鎊 |
雜貨 | 轉移 | 80 英鎊 |
賭博 | 轉移 | 30 英鎊 |
謝謝你
您可以使用 iterrows() 方法遍歷行。 從那里,您可以檢查一行的列是否為空並保存您的組名。 當您在下面找到完整的行時,您可以將組名寫入相應的插槽。
temp = None
for i, row in df.iterrows():
if str(row['purchase']) == 'nan':
if str(row['product']) != 'nan':
temp = row['product']
print(temp)
elif temp:
df.iloc[i]['purchase'] = temp
我相信這段代碼應該能得到你想要的。
基本上,您想使用 function 的組來根據值對行進行分組,並使用頭部 function 返回每個組的“價格”的最高值。
df = df.groupby(["product", "purchase"]).head(1)
temp = None
for i, row in df.iterrows():
if str(row['purchase']) == 'nan':
if str(row['product']) != 'nan':
temp = row['product']
print(temp)
elif temp:
df.iloc[i]['purchase'] = temp
此方法有效,請檢查您的字段名稱“購買”而不是“購買”。 檢查您的大寫字母大小寫
謝謝萊昂
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.