如何使用单行表达式计算列中非空值的数量,并将结果写入相同的列而不是非空值?
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
d = {
7:{"c1":5, "c2":8, "c3":10},
5:{"c1":1, "c2":7, "c3":10},
4:{"c1":1, "c2":6, "c3":8},
3:{"c1":4, "c2":7, "c3":9},
2:{"c1":3, "c2":5, "c3":6},
1:{"c1":2, "c2":7, "c3":9}
}
df = pd.DataFrame(d).T
r = (df
.stack()
.reset_index(name="col")
.assign(x=1)
.pivot_table(index="level_0", columns="col", values="x")
.reindex(range(1,11), axis=1)
.fillna(0)
.astype("int8")
.rename_axis(None)
.rename_axis(None, axis=1))
print(r)
当前结果
1 2 3 4 5 6 7 8 9 10
1 0 1 0 0 0 0 1 0 1 0
2 0 0 1 0 1 1 0 0 0 0
3 0 0 0 1 0 0 1 0 1 0
4 1 0 0 0 0 1 0 1 0 0
5 1 0 0 0 0 0 1 0 0 1
7 0 0 0 0 1 0 0 1 0 1
预期结果
1 2 3 4 5 6 7 8 9 10
1 0 1 0 0 0 0 3 0 2 0
2 0 0 1 0 2 2 0 0 0 0
3 0 0 0 1 0 0 3 0 2 0
4 2 0 0 0 0 2 0 2 0 0
5 2 0 0 0 0 0 3 0 0 2
7 0 0 0 0 2 0 0 2 0 2
如果您需要更通用的选项(当数据帧中的非零值不一定等于 1 时,那么
apply最好将后者写成这样: