【发布时间】:2021-06-07 05:40:18
【问题描述】:
假设我在以下结构中有一个 df,
column1 | column2 | column3 | column4 | column5 | column6 | column7
A | B | C | 10 | 78 | 12 | 202001
A | B | D | 21 | 64 | 87 | 202001
A | B | E | 21 | 64 | 87 | 202001
X | K | C | 54 | 23 | 23 | 202001
X | K | D | 21 | 55 | 87 | 202001
X | K | E | 21 | 43 | 22 | 202001
A | B | C | 10 | 78 | 12 | 202002
A | B | D | 23 | 64 | 87 | 202002
A | B | E | 21 | 11 | 34 | 202002
Z | K | C | 10 | 78 | 12 | 202002
Z | K | D | 21 | 13 | 56 | 202002
Z | K | E | 12 | 77 | 34 | 202002
column1 和 column2 之间的关系 - 一对多
column2 与 column1 之间的关系 - 一对多
预期输出:
column1 | column2 | column3 | column4_202001 | column5_202001 | column6_202001 | column4_202002 | column5_202002 | column6_202002 |
A | B | C | 10 | 78 | 12 | 10 | 78 | 12 |
A | B | D | 21 | 64 | 87 | 23 | 64 | 87 |
A | B | E | 21 | 64 | 87 | 21 | 11 | 34 |
X | K | C | 54 | 23 | 23 | 0 | 0 | 0 |
X | K | D | 21 | 55 | 87 | 0 | 0 | 0 |
X | K | E | 21 | 43 | 22 | 0 | 0 | 0 |
Z | K | C | 0 | 0 | 0 | 10 | 78 | 12 |
Z | K | D | 0 | 0 | 0 | 21 | 13 | 56 |
Z | K | E | 0 | 0 | 0 | 12 | 77 | 34 |
另外,在转换时,我可以在 column6_yyyymm 旁边为每个 column7 创建一个空列吗?
最终输出,
column1 | column2 | column3 | column4_202001 | column5_202001 | column6_202001 | empty_202001 | column4_202002 | column5_202002 | column6_202002 | empty_202002 ....
A | B | C | 10 | 78 | 12 | | 10 | 78 | 12 |
A | B | D | 21 | 64 | 87 | | 23 | 64 | 87 |
A | B | E | 21 | 64 | 87 | | 21 | 11 | 34 |
X | K | C | 54 | 23 | 23 | | 0 | 0 | 0 |
X | K | D | 21 | 55 | 87 | | 0 | 0 | 0 |
X | K | E | 21 | 43 | 22 | | 0 | 0 | 0 |
Z | K | C | 0 | 0 | 0 | | 10 | 78 | 12 |
Z | K | D | 0 | 0 | 0 | | 21 | 13 | 56 |
Z | K | E | 0 | 0 | 0 | | 12 | 77 | 34 |
如何使用 python 函数和/或 pandas 库实现最终输出?如果有什么不清楚的地方请告诉我。
更新:
对于所有 empty_yyyymm 列我想实现以下功能,
def get_final(row):
if row['column2'].isin(['H', 'S', 'Z']):
return 0
elif row['column4_yyyymm'] + row['column5_yyyymm'] - row['column6_yyyymm'] < 0 and not row['column2'].isin(['H', 'S', 'Z']):
return 0
else:
return row['column4_yyyymm'] + row['column5_yyyymm'] - row['column6_yyyymm']
如何也能做到这一点?
注意:yyyymm 是引用 column7 的通用方式。它实际上不是一个列。
【问题讨论】:
标签: python pandas dataframe data-manipulation