[英]Replicate row in Pandas dataframe based on condition and change values for a specific column
[英]I cannot change the values of a column with specific condition
该表如下所示:
文本 | 假人1 | 天 |
---|---|---|
op123ac | 1个 | 2000-01-01 |
op123ac | 0 | 2000-01-04 |
op123ac | 0 | 2000-01-07 |
op123ac | 0 | 2000-01-10 |
op1248ab | 0 | 2000-01-17 |
op1248ab | 1个 | 2000-01-20 |
op1248ab | 1个 | 2000-01-23 |
op1248ab | 1个 | 2000-01-26 |
每个唯一的“文本”有四个重复的值对应于四个唯一的“天”。 每个“文本”的“天”是连续的。 问题是每个“文本”必须有一个唯一的“dummy1”,所以它必须是 1 或 0 并且:
df.groupby("text")['dummy'].sum() # Each "text" should get either 0 or 4, no other value are accept.
我认为错误“dummy1”的count
少于正确的数量。 例如,“op123ac”在“dummy1”列中有 1 和 0,0(3) 的计数比 1(1) 的计数多得多,因此正确的“dummy1”应该是 0。“op1248ab”有更多的 1s大于 0,所以它的正确值应该是 1。正确的表格应该如下所示:
文本 | 假人1 | 天 |
---|---|---|
op123ac | 0 | 2000-01-01 |
op123ac | 0 | 2000-01-04 |
op123ac | 0 | 2000-01-07 |
op123ac | 0 | 2000-01-10 |
op1248ab | 1个 | 2000-01-17 |
op1248ab | 1个 | 2000-01-20 |
op1248ab | 1个 | 2000-01-23 |
op1248ab | 1个 | 2000-01-26 |
对于任何“文本”值,0 的数量都不可能等于 1 的数量。
df['dummy1'] = df.groupby('text')['dummy1'].transform(lambda x: x.mode().iat[0])
Output
text dummy1 days
0 op123ac 0 2000-01-01
1 op123ac 0 2000-01-04
2 op123ac 0 2000-01-07
3 op123ac 0 2000-01-10
4 op1248ab 1 2000-01-17
5 op1248ab 1 2000-01-20
6 op1248ab 1 2000-01-23
7 op1248ab 1 2000-01-26
一组值的众数是最常出现的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.