pandas Python:遍历元组并将每个值插入数据框

siotufzp  于 2023-02-11  发布在  Python
关注(0)|答案(3)|浏览(131)

尝试循环遍历当前是数据框中的列的元组。对于第一个ID,我希望选择组元组中的第一项,对于第二个ID,我希望选择元组中的第二个变量。对于同一组中的其余ID,我希望循环返回元组。
如果分组改变了,我会对新的分组重复这个过程,我也可以把它拆分成一个新的数据框,然后把结果合并回来。

df = pd.DataFrame({'ID':[1,2,3,4,5,6],
                   'Group':["('Cat','Dog')",
                             "('Cat','Dog')",
                             "('Cat','Dog')",
                             "('Cat','Dog')",
                             "('Bird','Dog')",
                             "('Bird','Dog')",                             
                            ]
                  })

| 识别号|集团|
| - ------|- ------|
| 1个|("猫","狗")|
| 第二章|("猫","狗")|
| 三个|("猫","狗")|
| 四个|("猫","狗")|
| 五个|("鸟","狗")|
| 六个|("鸟","狗")|
| 识别号|集团|
| - ------|- ------|
| 1个|猫|
| 第二章|狗|
| 三个|猫|
| 四个|狗|
| 五个|鸟|
| 六个|狗|

tpxzln5u

tpxzln5u1#

假设一列元组:

df['Group'] = (df.groupby(df['ID'].sub(1).mod(2))['Group']
                 .transform(lambda s: s.str[s.name])
               )

如果有字符串:

from ast import literal_eval
df['Group'] = (df['Group'].apply(literal_eval)
               .groupby(df['ID'].sub(1).mod(2))
               .transform(lambda s: s.str[s.name])
              )

输出:

ID Group
0   1   Cat
1   2   Dog
2   3   Cat
3   4   Dog
4   5  Bird
5   6   Dog
q3aa0525

q3aa05252#

就这么做

df['Group'] = df['Group'].apply(lambda x: eval(x))
df['Group'] = df.apply(lambda x: x['Group'][x['ID'] % 2 == 0], axis=1)
zaq34kh6

zaq34kh63#

temp_df = df.copy()
temp_df = temp_df.explode('Group').reset_index(drop=True)
temp_df['Group'] = temp_df['Group'].str.strip("()").str.split(",")
temp_df = temp_df.explode('Group').reset_index(drop=True)
temp_df['Group'] = temp_df['Group'].str.strip("'")

print(temp_df)

相关问题