不确定我是否很好地措辞了总结。但基本上,我有一个数据框,每个 ID 在某些列中可能有多个值。我想获取这些潜在值(假设有 3 个我关心)并为每个包含和 X 创建一个列,如果该 ID 具有相应的值。所以基本上采取这个:
some_id | foo |
---|---|
1 | 10 |
1 | 20 |
2 | 10 |
2 | 20 |
2 | 30 |
3 | 30 |
并创建此:
some_id | 10 | 20 | 30 |
---|---|---|---|
1 | X | X | |
2 | X | X | X |
3 | X |
我已经能够做到这一点,但我想知道是否有比我更好的方法来做到这一点。我为每个列创建了一个新列,给它一个 X 或空白字符串,然后通过使用 .max() 聚合新列的函数来使用 Pandas 组。
这种方式对我来说似乎比优雅的解决方案更麻烦。另外,我在这里尝试完成的工作是否有一个术语?我不认为非规范化适用。
import pandas as pd
df = pd.DataFrame({'some_id': [1,1,2,2,2,3], 'foo': [10,20,10,20,30,30]})
print(df)
for col in [10,20,30]:
df[col] = df.apply(lambda row : "X" if row['foo'] == col else "", axis = 1)
output_df = df.groupby('some_id')[[10,20,30]].max().reset_index()
print(output_df)