熊猫跨行和列的净值

时间:2018-10-10 17:50:12

标签: python pandas

我有一个数据框,如下所示:

string strPhone = phonetextBox.Text;
if (strPhone.Substring(0,2) != "01")
{
MessageBox.Show("Please enter valid phone number! 01";
}
else
{
    MessageBox.Show("Correct phone number!");
}

我想从上面得到以下内容:

Col1    Col2    H1  H2  H3
A       up      19  19  10
A       down        6   11
B       up          13  17
B       down    15  13  11
C       up      13  15  16

对于Col1 Col2 H1 H2 H3 A up 19 13 A down 1 B up 6 B down 15 C up 13 15 16 Col1, H1, H2, H3,每个Col2类型的up值都被相加。

例如

down

网络是

A       up      19  19  10
A       down        6   11

A up 19 13 A down 1 19-019-6

获取

行和列的数量非常大,所以我尝试不对它们的值进行硬编码或对其进行循环。有熊猫可以做到这一点吗?

1 个答案:

答案 0 :(得分:2)

如果列中有任何负值,您可以尝试对各分组列进行求和并反转顺序。

df.groupby('Col1')['H1','H2','H3'].apply(lambda x:x.diff().fillna(0).transform(lambda x: list(reversed(x.tolist())) if any(x<0) else x) if len(x)>1 else x).abs()

出局:

    H1        H2    H3
0   19.0    13.0     0.0
1   0.0      0.0     1.0
2   0.0      0.0     6.0
3   15.0     0.0     0.0
4   13.0    15.0    16.0

我尝试使用没有反转功能的反转熊猫列表,我不知道为什么它不起作用。

df.groupby('Col1')['H1','H2','H3'].apply(lambda x:x.diff().fillna(0).transform(lambda x: x[::-1] if any(x<0) else x) if len(x)>1 else x).abs()