我是Python的新手。
假设我有DataFrame,并且想要切换具有相似ID的所有行的选定数据。
例如:
| id | Gender | Name | Hobby | Food |
+------+--------+---------+------------+-----------+
| 1111 | Male | Robert | Swim | Ice-cream |
| 1112 | Female | Natasha | Football | Pizza |
| 1111 | Female | Misa | Volleyball | Pasta |
| 1112 | Male | Rick | Sleep | Hamburger |
| 1113 | Male | Rondo | Read | Rice |
+------+--------+---------+------------+-----------+
预期输出:
+------+--------+---------+------------+-----------+
| id | Gender | Name | Hobby | Food |
+------+--------+---------+------------+-----------+
| 1111 | Male | Robert | Volleyball | Pasta |
| 1112 | Female | Natasha | Sleep | Hamburger |
| 1111 | Female | Misa | Swim | Ice-cream |
| 1112 | Male | Rick | Football | Pizza |
| 1113 | Male | Rondo | Read | Rice |
+------+--------+---------+------------+-----------+
所以我要做的是在具有相同ID的人之间切换数据(在此示例中,仅爱好和食物),但姓名和性别保持不变。
因此,基本上,第一行ID 1111,性别是男性,名字是罗伯特-爱好是排球,食物是面食。 在第二排,编号1111,性别是女性,名字是Misa-爱好是游泳,食物将是冰淇淋。并为id 1112做同样的事情。 我目前没有任何想法,除了编写一些循环然后使用空的DataFramme追加和切换。 谢谢大家!
答案 0 :(得分:0)
我选择交换Name
和Gender
而不是交换其他列:
def swap(x):
x[['Gender','Name']] = x[['Gender','Name']].values[::-1]
return x
df.groupby('id').apply(swap)
输出:
id Gender Name Hobby Food
0 1111 Female Misa Swim Icecream
1 1112 Male Rick Football Pizza
2 1111 Male Robert Volleyball Pasta
3 1112 Female Natasha Sleep Hamburger
4 1113 Male Rondo Read Rice
或者,如果您坚持正确的顺序,则交换其他列:
def swap2(x):
x[['Hobby','Food']] = x[['Hobby','Food']].values[::-1]
return x
print(df.groupby('id').apply(swap2))
输出:
id Gender Name Hobby Food
0 1111 Male Robert Volleyball Pasta
1 1112 Female Natasha Sleep Hamburger
2 1111 Female Misa Swim Icecream
3 1112 Male Rick Football Pizza
4 1113 Male Rondo Read Rice