python pandas new 列根据其他列中的条件进行分类

标签 python pandas if-statement conditional-statements

使用以下 python pandas 数据框 df:

df = pd.DataFrame({'transaction_id': ['A123','A123','B345','B345','C567','C567','D678','D678'], 
                   'product_id': [255472, 251235, 253764,257344,221577,209809,223551,290678],
                   'product_category': ['X','X','Y','Y','X','Y','Y','X']})

transaction_id | product_id | product_category
A123              255472             X
A123              251235             X
B345              253764             Y
B345              257344             Y
C567              221577             X
C567              209809             Y
D678              223551             Y
D678              290678             X

我需要添加另一列“transaction_category”,它查看 transaction_id 以及 transaction_id 中有哪些产品类别。 这是我正在寻找的输出:

transaction_id | product_id | product_category | transaction_id
123              255472             X                X only
123              251235             X                X only
345              253764             Y                Y only
345              257344             Y                Y only
567              221577             X                X & Y
567              209809             Y                X & Y
678              223551             Y                X & Y
678              290678             X                X & Y

请注意,我的数据框中还有其他我没有使用的列,所以我想我需要从 grouby 开始?

df2 = df.groupby(['transaction_id','product_category']).reset_index()

最佳答案

IIUC 通过使用transformjoin

df.groupby('transaction_id').product_category.transform(lambda x : '&'.join(set(x)))
Out[468]: 
0      X
1      X
2      Y
3      Y
4    X&Y
5    X&Y
6    X&Y
7    X&Y
Name: product_category, dtype: object

来自 scott match 你的预期输出:

df['transaction_category']=df.groupby('transaction_id')['product_category'].transform(lambda x: x + ' only' if len(set(x)) < 2 else ' & '.join(set(x)))
df
Out[479]: 
  product_category  product_id transaction_id transaction_category
0                X      255472           A123               X only
1                X      251235           A123               X only
2                Y      253764           B345               Y only
3                Y      257344           B345               Y only
4                X      221577           C567                X & Y
5                Y      209809           C567                X & Y
6                Y      223551           D678                X & Y
7                X      290678           D678                X & Y

关于python pandas new 列根据其他列中的条件进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49860435/

相关文章:

python - 在 PyQt 中使用 Windows 7 任务栏功能

Python 在图中找到对应最大 y 值的 x 值

python - Pandas 获得连续的行

javascript - jQuery - 如何检查一个元素是否存在?

ios - 将 datePicker 日期和计时器与用户日期和时间匹配 (swift3)

Python:使用 os.walk 时找不到现有文件(IOError:[Errno 2])

python - 元 python : Adding Methods to a Class

python - 如何使用日期时间索引从pandas数据框中的特定日期选择行

Python Pandas : How to read only first n rows of CSV files in?

java - 为什么我的 if-else block 从来没有被击中,即使它应该被击中? (只需要另一双眼睛。)