我有這樣的例子pandas.DataFrame
與+ 20K行創建標籤的新列,在下面的表格:大熊貓據幀:基於其他列
import pandas as pd
import numpy as np
data = {"first_column": ["A", "B", "B", "B", "C", "A", "A", "A", "D", "B", "A", "A"],
"second_column": [0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0]}
df = pd.DataFrame(data)
>>> df
first_column second_column
0 A 0
1 B 1
2 B 1
3 B 1
4 C 0
5 A 0
6 A 0
7 A 1
8 D 1
9 B 1
10 A 1
11 A 0
....
列first_column
對每一行A
,B
,C
,和D
。在第二列中,有一個表示一組值的二進制標籤。 1的所有連續分組都是獨特的「組」,例如,第1-3行是一組,第7-10行是另一組。
我想通過「AB」(該組僅由A或B組成),「CD」(該組僅由C或D組成)或「 「混合」(如果有混合,例如全部B和一個C)。知道這些分組中的某些百分比是多少,即AB的百分比超出總標籤的百分比也是有用的。所以,如果它只是A
或B
,身份應該是AB
。如果它只是C
或D
,身份應爲CD
。它是A,B,C和/或D的混合物,那麼它是mixed
。百分比(AB行數)/(#總行)
這裏是如何產生的DataFrame
看起來是:
>>> df
first_column second_column identity percent
0 A 0 0 0
1 B 1 AB 1.0
2 B 1 AB 1.0
3 B 1 AB 1.0
4 C 0 0 0
5 A 0 0 0
6 A 0 0 0
7 A 1 mixed 0.75 # 3/4, 3-AB, 4-total
8 D 1 mixed 0.75
9 B 1 mixed 0.75
10 A 1 mixed 0.75
11 A 0 0 0
....
我最初的想法是首先嚐試使用df.loc()
與
if (df.first_column == "A" | df.first_column == "B"):
df.loc[df.second_column == 1, "identity"] = "AB"
if (df.first_column == "C" | df.first_column == "D"):
df.loc[df.second_column == 1, "identity"] = "CD"
但這不考慮混合物,也不適用於孤立的分組。
我不明白怎麼算混合 - 您可以根據數學公式解釋一下嗎? – Edward
@愛德華對不起。如果它只有A或B,那麼'identity'應該是'AB'。如果只有C或D,那麼'identity'應該是'CD'。它是A,B,C和/或D的混合物,然後混合。這個百分比是'(AB行數量)/(總行數量)' – ShanZhengYang