我有一个数据框,如下所示:
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-0
,19-6
行和列的数量非常大,所以我尝试不对它们的值进行硬编码或对其进行循环。有熊猫可以做到这一点吗?
答案 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()