簡體   English   中英

計數從 0 到 1 和 0 到 2 的列更改值的出現次數

[英]Count number of occurences of a column changing value from 0 to 1 and 0 to 2

假設我有df1['col1']df2['col2']兩列的長度相等。 列中的值僅為012

如果df中的每個對應行都是關於元素的轉換,我如何找到從0 -> 21 -> 2df1df2的變化計數?

例如,我需要計算下面 2 列中的變化

    print(df1['orig_label'][0:5])
    Name: predicted_label, dtype: int64
    0    2
    1    2
    2    0
    3    0
    4    1

print(df2['predicted_label'][0:5])
Name: predicted_label, dtype: int64
0    1
1    1
2    0
3    2
4    2

預期 output:1 和 1

這是 0->2 和 1->2 轉換的計數

這是pandas.crosstab的用例:

pd.crosstab(df1['col1'], df2['col2'])

Output:

col2  0  1  2
col1         
0     1  0  1
1     0  0  1
2     0  2  0

要僅獲得 0->2 和 1->2:

pd.crosstab(df1['col1'], df2['col2']).loc[[0,1], [2]]

Output:

col2  2
col1   
0     1
1     1

這個怎么樣?:

df1 = pd.DataFrame(data={"col1":[0,1,2,3,4], "col2":[2,2,0,0,1]}, columns=["col1", "col2"])

df["0->2"] = df.apply(lambda row: 1 if row["col1"] == 0 and row["col2"] == 2 else 0, axis=1)
df["1->2"] = df.apply(lambda row: 1 if row["col1"] == 1 and row["col2"] == 2 else 0, axis=1)

print("N 0->2 = {}".format(df["0->2"].sum()))
print("N 1->2 = {}".format(df["1->2"].sum()))

這可能會在原始 dataframe 中添加兩個額外的列,但如果您不想這樣做,也可以將它們創建為單獨的系列對象:

df = pd.DataFrame(data={"col1":[0,1,2,3,4], "col2":[2,2,0,0,1]}, columns=["col1", "col2"])
zeroToTwo = df.apply(lambda row: 1 if row["col1"] == 0 and row["col2"] == 2 else 0, axis=1)
oneToTwo = df.apply(lambda row: 1 if row["col1"] == 1 and row["col2"] == 2 else 0, axis=1)
print("N 0->2 = {}".format(zeroToTwo.sum()))
print("N 1->2 = {}".format(oneToTwo.sum()))

這是一種使用zip()value_counts()的方法

(pd.Series(['0-2' if (col1 == 0 and col12 == 2) else '1-2' if (col1 == 1 and col2 == 2) else None for col1,col2 in zip(df['col1'],df['col2'])])
 .value_counts())

Output

0-2    1
1-2    1
dtype: int64

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM