繁体   English   中英

Pandas Dataframe 中每一行内的计数条件

[英]Count conditions within each row in Pandas Dataframe

我有这个 dataframe:

   Char1  Char2  Char3
0      2      2      3
1      2      3      3
2      2      3      3
3      2      2      2

我需要创建三列( _1_2_3 ),每列分别计算每行中值 1、2 和 3 的出现次数。

所以 output 看起来像这样:

   Char1  Char2  Char3  _1  _2  _3
0      2      2      3   0   2   1
1      2      3      3   0   1   2
2      2      3      3   0   1   2
3      2      2      2   0   3   0

例如:

  • _1列始终等于 0,因为任何行中都没有 1
  • 对于_2列:
    • 它在第一行等于 2,因为第一行有两个 2
    • 它在第二行等于 1,因为第二行有一个 2
    • 等等.....

如何在 Python 中编码?

我已经尝试过此代码(仅适用于_1 ):

df['_1'] = df[df.Char1 == 1].sum() + df[df.Char2 == 1].sum() + df[df.Char3 == 1].sum()

但我得到“NaN”。

DF构造函数:

df = pd.DataFrame({'Char1':[2,2,2,2], 'Char2':[2,3,3,2], 'Char3':[3,3,3,2]})

您可以遍历[1,2,3]并在轴上使用eq来识别具有数字的单元格并跨列sum以获得总数:

for num in [1,2,3]:
    df[f"_{num}"] = df[['Char1','Char2','Char3']].eq(num, axis=1).sum(axis=1)

Output:

   Char1  Char2  Char3  _1  _2  _3
0      2      2      3   0   2   1
1      2      3      3   0   1   2
2      2      3      3   0   1   2
3      2      2      2   0   3   0

我们可以通过将字典理解传递给df.assign来简洁地做到这一点,其中字典键是列名,字典值是列系列:

df = df.assign(**{f'_{x}': df.eq(x, axis=1).sum(axis=1) for x in [1, 2, 3]})

#    Char1  Char2  Char3  _1  _2  _3
# 0      2      2      3   0   2   1
# 1      2      3      3   0   1   2
# 2      2      3      3   0   1   2
# 3      2      2      2   0   3   0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM