假設我有df1['col1']并且df2['col2']兩列的長度相等。列中的值為0,1且2僅。
如果 中的每個對應行都是關于元素的過渡,我如何找到從0->2和1->2從df1到的更改計數?df2df
例如,我需要計算下面 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
預期輸出:1 和 1
這是 0->2 和 1->2 轉換的計數
uj5u.com熱心網友回復:
這是一個用例pandas.crosstab:
pd.crosstab(df1['col1'], df2['col2'])
輸出:
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]]
輸出:
col2 2
col1
0 1
1 1
uj5u.com熱心網友回復:
這個怎么樣?:
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()))
這有向原始資料幀添加兩個額外列的潛在缺點,但如果您不想這樣做,您也可以將它們創建為單獨的系列物件:
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()))
uj5u.com熱心網友回復:
這是一種使用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())
輸出
0-2 1
1-2 1
dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374980.html
